繁体   English   中英

Java NIO-在服务器端注销客户端连接

[英]Java NIO - deregister client connection on server side

我正在使用Selectors和NIO通道编写一个简单的NIO服务器。 每次有传入连接时,我都会使用以下代码在选择器中注册它:

// accept connection
 SocketChannel client = server.accept();
 System.out.println("Accepting connection from " + client.socket().getLocalSocketAddress());

 client.configureBlocking(false);
 client.socket().setTcpNoDelay(true);
 client.register(selector, SelectionKey.OP_READ);

在客户端,由于我只有一个socketChannel,因此很容易简单地关闭通道并向选择器注销。 然而,从另一方面说,我正在做的就是等待任何曾经连接过的客户端(可能数千个)的写入。 我使用了一种方法来检测客户端在服务器端已断开连接? 似乎选择器在经过10K个连接后会变得非常低效,其中大部分可能会在不久后消失。

当客户端断开连接时,服务器将获得该通道的OP_READ事件,而read()将返回-1。 发生这种情况时,请关闭通道。

注意您只需要关闭频道。 取消密钥,注销等会自动发生。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM