在准备好读取的多个套接字中进行选择

我正在编写服务器客户端应用程序。 我有一个服务器,它拥有我从ServerSocket的accept()方法获得的几个套接字。 我想从这些套接字读取,但我不知道哪个套接字可以读取。 我需要某种选择器来选择一个可以读取的套接字,这样我就可以读取它发送的数据了。

谢谢。

您基本上有两个选项可以使它工作:

  1. 每个接受套接字都有专用线程。 这是因为’常规’套接字I / O正在阻塞。 您无法使用单个线程有选择地处理多个套接字。 由于没有“偷看”function,因此当您调用read时,您将始终面临被阻止的风险。 通过为每个有兴趣阅读的套接字创建一个线程,阻塞读取不会阻止任何其他操作(线程)。
  2. 使用NIO。 NIO允许异步I / O操作,基本上就是您要求的 – 选择器

如果您决定采用NIO方式,我建议您查看MINA和Netty 。 我发现它们比普通的NIO更容易使用。 您不仅可以获得更好的API,而且至少MINA还可以解决一些令人讨厌的NIO错误。