2013-01-08 211 views
0

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

如果我们只有一个的ServerSocketChannel,为什么我们需要一个选择?

任何人都可以给我一个真正的项目示例需要使用选择器吗?

谢谢!

回答

3

当你accept()ServerSocketChannel,你得到的回复是一个新的SocketChannel你再read()write()传达给客户端。

您的选择代码将通常select(),然后通过所选择的键迭代,接受任何密钥isAcceptable()(从而打开一个新的信道),但随后又读出和写入的任意键(您的接受客户端信道的可能一个)isReadable()isWritable()

0

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

0

如果我们只有一个的ServerSocketChannel,为什么我们需要一个选择

因为你将有很多接受SocketChannels,和一个Selector可以让你在同一个线程处理它们。