NioEchoServer::selector监听可写事件连续触发解决方案
原因:因为写入事件是一直可用的,所以没有必要一直注册该事件。
两种方案:
不注册写入事件: 读取结束,直接写入。
读完成后注册写入事件,写完成后取消写入事件。
解决办法:
读取数据完成时,添加写入事件。
写入数据完成时,重设事件为读取事件。
private void read(SelectionKey selectionKey) throws IOException {
selectionKey.interestOps(SelectionKey.OP_WRITE);
}
private void write(SelectionKey selectionKey) throws IOException {
selectionKey.interestOps(SelectionKey.OP_READ);
}