我正在使用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。