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

解决方案 »

  1.   

    不用开吧,客户机本身登陆以后自己在本地开设线程,每隔固定的时间向服务器发送连接的应答信号,服务器接受到就回一个,如果客户机能接受到信号,就表明他连接着,如果不行,就表明掉线不是也可以吗?线程池应该需要,但是是用来处理某些处理的,对于每个客户都开个线程跟踪,我想不太会吧。象qq都应该用udp了吧。这个协议都是直接发送数据,发完以后就不管了,具体不清楚,反正我觉得应该不会开线程监视客户机吧
      

  2.   

    用Socket就行了,满足tcp/ip协议就可进行网络传输,不用一直跟服务器连接着,到时候给服务器端发个消息就ok,要不qq得需要多少服务器才能让几万人同时在线?
      

  3.   

    是这样的,这个程序的功能除了能向对方发消息外,还可以向对方传文件,从服务器上下载文件,或上传文件给服务器,要求一个客户端可同时上传文件并向对方传输文件,或下载文件 .如果服务器端不开多线程,怎么同时完成这些任务.zhaobo80968096  :你的意思是说一个客户端向另一个客户端发送消息完后Socket就关闭??如果再要发消息就再连Socket??
      

  4.   

    如果向zhaobo80968096说的,不用一直跟服务器连接着,那意思就是说发个消息过去,客户端的Socket就断开,再要发消息再连接??
      

  5.   

    同意pbmiyuki()的说法我一直也有这样的疑问希望这次能解决
    高手在哪
      

  6.   

    1.为每个客户端分配一个线程  书上说这样资源消耗比较大,但我认为QQ这种东西是长时间的连接,不会频繁的开启关闭线程,我认为QQ用这种思路还是可以的
    1个线程用NIO接收客户连接数据等,然后为每个客户建一线程处理逻辑。这个线程用线程池,以免频繁创建/关闭/切换线程带来的效率问题。
    zhaobo80968096  :你的意思是说一个客户端向另一个客户端发送消息完后Socket就关闭??如果再要发消息就再连Socket??如果要这样那就用UDP会更好。
      

  7.   

    应该可以吧 ,好像QQ是基于UDP协议的 不需要实时发送 没有必要每一刻都和服务器保持连接
      

  8.   

    udp发行socket传送文件我们就是这样开发的