【发布时间】:2014-10-04 07:35:17
【问题描述】:
我有一个使用套接字进行通信的简单客户端-服务器应用程序。一种可能是每次客户端向服务器发送内容时关闭套接字。
但我的想法是保持连接始终打开,即如果客户端与服务器联系,则应将连接放入队列(例如 LinkedBlockingQueue)并保持打开,这将提高性能。
如果队列中的套接字中有新数据可用,我如何检查服务器?我唯一能想象到的就是不断迭代整个队列并检查每个套接字是否有新数据。但这会非常低效,因为如果我有多个线程在队列上工作,那么当一个线程正在扫描队列时,队列就会被阻塞。
或者有没有可能在socket上注册一个回调函数,让socket通知线程数据准备好了?
【问题讨论】:
-
socket 的 InputStreams 有几个读方法会阻塞当前线程,直到有东西可用。你通常需要做套接字网络多线程。这意味着每个客户端都有一个接收线程,将数据存储在主线程可以在需要时检索它的地方。 (评论因为不确定这是否是问题)