想写一个类似QQ的JAVA通信程序,是否该用线程池??

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

请各位说下适合那种思路.
...全文
315 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
mdxk 2007-07-05
  • 打赏
  • 举报
回复
udp发行

socket传送文件

我们就是这样开发的
javafreshfish 2007-07-05
  • 打赏
  • 举报
回复
qq 是不是udp啊
tdy1234 2007-07-04
  • 打赏
  • 举报
回复
应该可以吧 ,好像QQ是基于UDP协议的 不需要实时发送 没有必要每一刻都和服务器保持连接
pbmiyuki 2007-07-04
  • 打赏
  • 举报
回复
楼上的意思是说用非阻塞方式来完成.那如果用阻塞的方式呢?
非阻塞和阻塞那种方式好??
zhaobo80968096 2007-07-03
  • 打赏
  • 举报
回复
用Socket就行了,满足tcp/ip协议就可进行网络传输,不用一直跟服务器连接着,到时候给服务器端发个消息就ok,要不qq得需要多少服务器才能让几万人同时在线?
umbrella1984 2007-07-03
  • 打赏
  • 举报
回复
1.为每个客户端分配一个线程 书上说这样资源消耗比较大,但我认为QQ这种东西是长时间的连接,不会频繁的开启关闭线程,我认为QQ用这种思路还是可以的


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


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

如果要这样那就用UDP会更好。
ym_009 2007-07-03
  • 打赏
  • 举报
回复
高手都睡觉去了。
supersunyi 2007-07-03
  • 打赏
  • 举报
回复
不用开吧,客户机本身登陆以后自己在本地开设线程,每隔固定的时间向服务器发送连接的应答信号,服务器接受到就回一个,如果客户机能接受到信号,就表明他连接着,如果不行,就表明掉线不是也可以吗?线程池应该需要,但是是用来处理某些处理的,对于每个客户都开个线程跟踪,我想不太会吧。象qq都应该用udp了吧。这个协议都是直接发送数据,发完以后就不管了,具体不清楚,反正我觉得应该不会开线程监视客户机吧
javafreshfish 2007-07-03
  • 打赏
  • 举报
回复
同意pbmiyuki()的说法我一直也有这样的疑问希望这次能解决
高手在哪
pbmiyuki 2007-07-03
  • 打赏
  • 举报
回复
如果向zhaobo80968096说的,不用一直跟服务器连接着,那意思就是说发个消息过去,客户端的Socket就断开,再要发消息再连接??
pbmiyuki 2007-07-03
  • 打赏
  • 举报
回复
是这样的,这个程序的功能除了能向对方发消息外,还可以向对方传文件,从服务器上下载文件,或上传文件给服务器,要求一个客户端可同时上传文件并向对方传输文件,或下载文件 .如果服务器端不开多线程,怎么同时完成这些任务.

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

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧