如果我们正在创建一个在线聊天服务器,我认为我们应该只需要一个ServerSocketChannel,不是吗?为什么我们需要Java NIO Selector?
如果我们只有一个的ServerSocketChannel,为什么我们需要一个选择?
任何人都可以给我一个真正的项目示例需要使用选择器吗?
谢谢!
如果我们正在创建一个在线聊天服务器,我认为我们应该只需要一个ServerSocketChannel,不是吗?为什么我们需要Java NIO Selector?
如果我们只有一个的ServerSocketChannel,为什么我们需要一个选择?
任何人都可以给我一个真正的项目示例需要使用选择器吗?
谢谢!
当你accept()
在ServerSocketChannel
,你得到的回复是一个新的SocketChannel
你再read()
和write()
传达给客户端。
您的选择代码将通常select()
,然后通过所选择的键迭代,接受任何密钥isAcceptable()
(从而打开一个新的信道),但随后又读出和写入的任意键(您的接受客户端信道的可能一个)isReadable()
或isWritable()
。
您需要一个选择器来支持非阻塞NIO。如果你使用阻塞NIO(这是默认的),你不需要选择器。
如果我们只有一个的ServerSocketChannel,为什么我们需要一个选择
因为你将有很多接受SocketChannels,
和一个Selector
可以让你在同一个线程处理它们。