我在理解如何处理套接字时遇到了一些问题。我得到服务器套接字必须在自己的线程中运行,因为它必须检查是否有新的连接。现在,我不确定新连接打开的每个套接字是否应该在一个线程中运行。
我想到的是检查套接字所说的每x次。如果有东西需要阅读,那么请阅读。如果没有,请检查下一个插座。我看到一些例子,这个过程是在一个线程中完成的,但是我不想让套接字做东西,只是想要读取它是否有一些数据,并处理它们。
答案 0 :(得分:2)
答案是否定的,你不需要在一个单独的线程中听。但是,只要意识到,当你“倾听”时,你的整个程序将等待它继续前进。
因此,除非你对整个程序等待好,否则我会建议一个单独的线程。
答案 1 :(得分:1)
您还可以拥有一个以循环方式与所有套接字通信的线程。它会检查每个套接字是否有新数据,如果没有则检查下一个套接字。
另一种选择是使用NIO(新输入/输出)。
NIO背后的想法是你有一个Selector的线程,它拥有多个Channels(一个通道可以是一个网络套接字或任何其他IO接口)。然后在循环中调用selector.select()。此方法阻塞直到一个或多个通道具有数据,然后返回一组这些通道。然后,您可以处理所提供频道的数据。
答案 2 :(得分:1)
使用available()的循环问题很多。
我确信还有更多。
不要这样做。使用线程或NIO。