如果是多线程我知道,服务器用 while(true) accept 一直等在等待用户,来一个就 新建一个线程对应这个用户,这样做的问题是如果用户量很大,就会很占资源。但是用线程池有个问题我一直想不明白,对于像聊天这样的,不是必须每个用户对应一个线程吗?假设,线程池最大线程数量是5,而这时候有6个客户,那不是有一个客户服务器无法接收到他的消息吗??还是说 聊天室不能用线程池来做呢???求达人解答一下!

解决方案 »

  1.   

    看你怎么设计了,如果一个连接固定有一个线程专门服务,那么就是你说的这种结果!
    一般可以考虑使用nio来处理网络,以异步的方式收发消息,这样只有一个线程循环工作,线程池总是在待命,收到消息提交给工作线程,工作线程完成后提交给收发线程发送!
    关键在于把网络IO处理成异步!
      

  2.   


    无阻塞,照你说的话应该可以,要是客户端改成短连接呢? 客户发完一个消息后关闭socket,可是客户关闭socket后,服务器怎么把其他客户发的消息发给这个客户呢?