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

想写一个类似QQ的JAVA通信程序,是否该用线程池??
服务器端肯定要用多线程,有两种思路:
1.为每个客户端分配一个线程     书上说这样资源消耗比较大,但我认为QQ这种东西是长时间的连接,不会频繁的开启关闭线程,我认为QQ用这种思路还是可以的
2.创建一个线程池,用线程池管理客户端线程.但是我认为这种方式不适合长时间的连接,如果给定线程池中固定的线程数,那么有新客户端连接上来那不就要等待了??

请各位说下适合那种思路.

------解决方案--------------------
不用开吧,客户机本身登陆以后自己在本地开设线程,每隔固定的时间向服务器发送连接的应答信号,服务器接受到就回一个,如果客户机能接受到信号,就表明他连接着,如果不行,就表明掉线不是也可以吗?线程池应该需要,但是是用来处理某些处理的,对于每个客户都开个线程跟踪,我想不太会吧。象qq都应该用udp了吧。这个协议都是直接发送数据,发完以后就不管了,具体不清楚,反正我觉得应该不会开线程监视客户机吧
------解决方案--------------------
用Socket就行了,满足tcp/ip协议就可进行网络传输,不用一直跟服务器连接着,到时候给服务器端发个消息就ok,要不qq得需要多少服务器才能让几万人同时在线?
------解决方案--------------------
同意pbmiyuki()的说法我一直也有这样的疑问希望这次能解决
高手在哪
------解决方案--------------------
高手都睡觉去了。
------解决方案--------------------
1.为每个客户端分配一个线程 书上说这样资源消耗比较大,但我认为QQ这种东西是长时间的连接,不会频繁的开启关闭线程,我认为QQ用这种思路还是可以的


1个线程用NIO接收客户连接数据等,然后为每个客户建一线程处理逻辑。这个线程用线程池,以免频繁创建/关闭/切换线程带来的效率问题。


zhaobo80968096 :你的意思是说一个客户端向另一个客户端发送消息完后Socket就关闭??如果再要发消息就再连Socket??

如果要这样那就用UDP会更好。
------解决方案--------------------
应该可以吧 ,好像QQ是基于UDP协议的 不需要实时发送 没有必要每一刻都和服务器保持连接
------解决方案--------------------
udp发行

socket传送文件

我们就是这样开发的