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

时间:2011-08-17 18:38:19

标签: java io nonblocking

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

感谢。

1 个答案:

答案 0 :(得分:1)

你基本上有两个选项可以让它发挥作用:

  1. 每个接受的套接字都有专用线程。这是因为'常规'套接字I / O正在阻塞。您无法使用单个线程有选择地处理多个套接字。由于没有“偷看”功能,因此在调用read时,您将始终面临被阻止的风险。通过为每个有兴趣阅读的套接字创建一个线程,阻塞读取不会阻止任何其他操作(线程)。
  2. 使用NIO。 NIO允许异步I / O操作,基本上就是您要求的 - 选择器
  3. 如果您决定采用NIO方式,我建议您查看MINANetty。我发现它们比普通的NIO更容易使用。您不仅可以获得更好的API,而且至少MINA还可以解决一些令人讨厌的NIO错误。