我有一个简单的客户端服务器应用程序使用套接字进行通信。一种可能性是每次客户端向服务器发送一些东西时关闭套接字。保持java套接字打开 - 如何检查新数据是否可用?
但我的想法是保持连接始终打开,即如果客户端联系服务器,应将连接放入队列(例如LinkedBlockingQueue)并保持打开状态,这会提高性能。
如何在服务器中检查队列中是否有可用的新数据?我能想象的唯一事情就是不断迭代整个队列,并检查每个套接字是否有新数据。但是这会非常低效,因为如果我有几个线程在队列上工作,当一个线程扫描队列时队列就会被阻塞。
或者是否有可能在套接字上注册回调函数,以便套接字通知线程数据已准备好?
套接字的InputStreams有几个读取方法,可以阻止当前线程,直到有可用的东西。你通常需要做套接字网络多线程。这意味着每个客户端都有一个接收线程,将数据存储在主线程需要时可以检索到的地方。 (评论,因为不知道这是否是这个问题) – Felk 2014-10-03 23:16:55