如果我们要创建一个在线聊天服务器,我认为我们应该只需要一个ServerSocketChannel,不是吗?
如果我们只获得一个ServerSocketChannel,为什么我们需要一个Selector?
有人能给我一个真正的项目示例需要使用Selector吗?
谢谢!
答案 0 :(得分:3)
当您在accept()
上ServerSocketChannel
时,您获得的是新的SocketChannel
,然后您read()
和write()
与该客户进行通信。
您的选择代码通常为select()
,然后迭代选定的键,接受isAcceptable()
的任何键(从而打开一个新频道),然后还读取和写入任何键(可能是其中一个键)您接受的客户频道)isReadable()
或isWritable()
。
答案 1 :(得分:0)
您需要一个选择器来支持非阻塞NIO。如果您使用阻止NIO(这是默认设置),则不需要选择器。
答案 2 :(得分:0)
如果我们只获得一个ServerSocketChannel,为什么我们需要一个Selector
因为你会有很多被接受的SocketChannels,
和Selector
让你在同一个帖子中处理它们。