Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在准备从中读取的多个套接字中进行选择_Java_Io_Nonblocking - Fatal编程技术网

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

Java 在准备从中读取的多个套接字中进行选择,java,io,nonblocking,Java,Io,Nonblocking,我正在编写一个服务器客户端应用程序。我有一个服务器,它保存了从ServerSocket的accept()方法获得的几个套接字。我想从这些套接字中读取数据,但我不一定知道准备从哪个套接字读取数据。我需要某种选择器来选择一个准备好读取的套接字,以便读取它发送的数据 谢谢。您基本上有两种选择可以让它工作: 每个接受的套接字都有专用线程。这是因为“常规”套接字I/O阻塞。不能使用单个线程选择性地处理多个套接字。由于没有“偷看”功能,因此在调用read时,您总是有被阻止的风险。通过在您感兴趣的每个套接字上

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


谢谢。

您基本上有两种选择可以让它工作:

  • 每个接受的套接字都有专用线程。这是因为“常规”套接字I/O阻塞。不能使用单个线程选择性地处理多个套接字。由于没有“偷看”功能,因此在调用
    read
    时,您总是有被阻止的风险。通过在您感兴趣的每个套接字上都有一个线程,阻止读取不会阻止任何其他操作(线程)
  • 使用NIO。NIO允许异步I/O操作,基本上就是您所要求的——选择器

  • 如果你真的决定走NIO之路,我建议你退房并离开。我发现他们比普通的NIO更容易相处。您不仅可以使用更好的API,而且至少MINA还可以解决一些讨厌的NIO bug。

    您知道吗?然而,由于它的使用非常复杂,包装器库通常是首选。是的,Netty非常棒,正如merryprankster所建议的。谢谢,Netty看起来很棒!正是我想要的。