对于给定的选择键,将interestOps设置为0将被忽略

时间:2019-05-05 16:24:13

标签: java sockets nio

我正在使用java.nio.channels处理多个打开的套接字。调用selectionKey.interestOps(0)似乎被忽略。当我在此操作后立即调用selectionKey.readyOps()时,它将始终返回4(写)。

这样做是为了减少选择器必须处理的键数。我试图找到另一种解决方案,但似乎这是将已完成的操作设置为“无”的一种方式。 将键设置为“可读”有效,因此可以更改所需的操作,但不能删除所有操作。

public class SelectorClass{
 ... 
 //during accept -> this happens
 client = new Client(key) 
 ...
}

public class Client{

private final SelectionKey selectionKey;

public Client(SelectionKey key){
 this.selectionKey = key;
 setToNone();
}

public void setToNone(){
if(selectionKey.isValid()) {
 selectionKey.interestOps(0);
 System.out.println(selectionKey.readyOps()); //Should be 0     
}
}
}

我希望在将interesteOps设置为0后,调用readyOps时,关联到客户端的密钥会返回0。

0 个答案:

没有答案