出于性能原因,我正在使用Java NIO实现一个简单的聊天服务器,我从几个来源读到,他们建议不要在SocketChannel
注册Selector
来监听读写事件。同时,但只有在有可写数据时才注册写事件。
现在我不知道如何为SocketChannel
修改和写操作获取特定的OP_WRITE
对象。
以下是该场景,20个聊天客户端在给定时间与聊天服务器建立连接。 ChatClient 1发送一条消息,打算发送给ChatClient 15.从ChatClient 1 SocketChannel
读取数据后,如何获取ChatClient 15 SocketChannel
具体哪个我{打算修改为OP_WRITE
,然后写出适合它的数据。
我不知道这种方法是否有效,但我想在调用SocketChannel
方法时将ServerSocketChannel.accept()
对象添加到带有可用于索引的列表中稍后再查看。因此,当有数据可写入客户端15时,我从列表中查找SocketChannel
对象,然后执行OP_WRITE
修改,然后写入数据。这有用吗?
感谢您的时间。
答案 0 :(得分:0)
这只是一个数据结构问题。您知道要写入哪个客户端,因此您只需要一个可以从中获取SocketChannel的数据结构。您可以按照自己喜欢的方式键入它:顺序索引,客户端识别字符串,他的IP地址;适用于您的应用程序。