如果我们正在创建一个在线聊天服务器,我认为我们应该只需要一个 ServerSocketChannel,不是吗?
如果我们只得到一个 ServerSocketChannel,为什么我们需要一个 Selector 呢?
谁能给我一个需要使用 Selector 的真实项目示例?
谢谢 !
如果我们正在创建一个在线聊天服务器,我认为我们应该只需要一个 ServerSocketChannel,不是吗?
如果我们只得到一个 ServerSocketChannel,为什么我们需要一个 Selector 呢?
谁能给我一个需要使用 Selector 的真实项目示例?
谢谢 !
当您accept()
使用 时ServerSocketChannel
,您得到的是一个新SocketChannel
的,然后您将read()
与write()
该客户进行交流。
您的选择代码通常会select()
,然后遍历选定的键,接受任何键isAcceptable()
(从而打开一个新通道),然后读取和写入任何键(可能是您接受的客户端通道之一)isReadable()
或isWritable()
.
你需要一个选择器来支持非阻塞 NIO。如果您使用阻塞 NIO(这是默认设置),则不需要选择器。
如果我们只得到一个 ServerSocketChannel,为什么我们需要一个 Selector
因为您将有很多被接受SocketChannels,
,并且Selector
可以让您在同一个线程中处理它们。