为什么我们需要Java NIO选择器?

时间:2013-01-08 03:24:16

标签: java nio serversocket

如果我们要创建一个在线聊天服务器,我认为我们应该只需要一个ServerSocketChannel,不是吗?

如果我们只获得一个ServerSocketChannel,为什么我们需要一个Selector?

有人能给我一个真正的项目示例需要使用Selector吗?

谢谢!

3 个答案:

答案 0 :(得分:3)

当您在accept()ServerSocketChannel时,您获得的是新的SocketChannel,然后您read()write()与该客户进行通信。

您的选择代码通常为select(),然后迭代选定的键,接受isAcceptable()的任何键(从而打开一个新频道),然后还读取和写入任何键(可能是其中一个键)您接受的客户频道)isReadable()isWritable()

答案 1 :(得分:0)

您需要一个选择器来支持非阻塞NIO。如果您使用阻止NIO(这是默认设置),则不需要选择器。

答案 2 :(得分:0)

  

如果我们只获得一个ServerSocketChannel,为什么我们需要一个Selector

因为你会有很多被接受的SocketChannels,Selector让你在同一个帖子中处理它们。