Dr.*_*all 8 java sockets select nonblocking socketchannel
这是一个非常直截了当的问题,但我发现需要取消注册选择器,忽略我的套接字通道的java.
SocketChannel client = myServer.accept(); //forks off another client socket
client.configureBlocking(false);//this channel takes in multiple request
client.register(mySelector, SelectionKey.OP_READ | SelectionKey.OP_WRITE);//changed from r to rw
Run Code Online (Sandbox Code Playgroud)
我可以在以后的程序中调用类似的东西
client.deregister(mySelector);
Run Code Online (Sandbox Code Playgroud)
并且选择器将不再捕获该套接字通道的数据键.鉴于我的服务器/客户端设计,这将使我的生活更轻松.
Nik*_*sov 22
调用cancel()选择键:
SelectionKey key = client.register(mySelector,
SelectionKey.OP_READ | SelectionKey.OP_WRITE);
...
key.cancel();
Run Code Online (Sandbox Code Playgroud)
要么
...
SelectionKey key = client.keyFor(mySelector);
key.cancel();
Run Code Online (Sandbox Code Playgroud)
除了@Nikolai 的回答。这样做client.close()还将取消注册该通道。
当取消键时,无论是通过关闭其通道还是通过调用其取消方法,键都会添加到其选择器的取消键集中。
来自https://docs.oracle.com/javase/7/docs/api/java/nio/channels/Selector.html
| 归档时间: |
|
| 查看次数: |
7448 次 |
| 最近记录: |