0

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

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

谁能给我一个需要使用 Selector 的真实项目示例?

谢谢 !

4

3 回答 3

3

当您accept()使用 时ServerSocketChannel,您得到的是一个新SocketChannel的,然后您将read()write()该客户进行交流。

您的选择代码通常会select(),然后遍历选定的键,接受任何键isAcceptable()(从而打开一个新通道),然后读取和写入任何键(可能是您接受的客户端通道之一)isReadable()isWritable().

于 2013-01-08T04:53:52.873 回答
0

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

于 2013-01-08T07:01:04.210 回答
0

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

因为您将有很多被接受SocketChannels,,并且Selector可以让您在同一个线程中处理它们。

于 2013-01-09T09:30:25.857 回答