日期:2014-05-20  浏览次数:20623 次

Java,希望得到 CS端通讯的一些建议
我的毕业设计题目是一个基于Java的“IM”,也就是即时通讯。但我自己思路上有些卡死了,希望指教下:
------------
我的思路:
    假定有 Client端:A 、 B ; Server端:Server 
    1、A 、 B通讯,则A上线后把IP和端口交给Server;B上线后,Server把A的IP和端口告诉B,反之如此。
    2、由于无法断定通讯对方是否上线,则都用UDP传输!
-------------
问题:
    1、假如有100个Client,都把IP和端口给Server,然后Server转发,也就是说,每一个通讯方都既然接到了一次信息,那么,Client1同时和Client2和Client3通讯,一个就发了2次,以此类推,由于每一个Client都至少发送一次,于是光100个Client就有 100*(发送次数) 个通讯连接,Server怎么吃得消!
    2、都用UDP,似乎本身就问题重重,一是太慢,二是校验耗时!
--------------
不知各位有什么好的IM思路 ???

------解决方案--------------------
100个怎么会吃不消啊。使用java nio处理udp协议,保持在线心跳时间设置稍微长一点,一般的服务器,支持一万个客户端应该不会有问题(我自己没有实际测试过,感觉一万个应该没有问题)。

建议不要把所有客户端的地址信息进行广播,只传送状态变更信息。一般的文字消息其实可以不用点对点传输,可以通过服务器转发。只有当传输图片、文件等的时候,再向服务器请求对方的地址信息,并实现穿透。
------解决方案--------------------
像毕业设计这种题目,不需要楼上说的java nio,用阻塞式socket编程就可以了,弄一个线程池管理客户端连接就够了,100个连接还是吃得消
------解决方案--------------------
别过度设计,毕业设计而已,能开10个客户端测试了不起了。
真考虑商业使用,那是不会用java开发的。