java - Netty中客户端(浏览器)退出时如何从管道中删除 channel ?

标签 java netty

许多客户端(浏览器)可以通过 websockets 连接到我的服务器(netty-server)。我想要的是,每当客户端关闭选项卡(他连接到我的服务器的 url)时,与他关联的 channel 也应该被取消注册。但这不会自动发生,因为我已经创建了一个哈希集并添加了客户端 ip 到channelRegistered(..)方法中的哈希集,并从channelUnregistered(..)方法中的哈希集中删除ip。但它并没有被删除。请告诉我是否有其他方法可以在客户端退出浏览器(或他所连接的选项卡)时取消注册 channel 。谢谢。

最佳答案

channelRegistered()channelUnregistered() 是用于此目的的错误方法。这些方法的目的是在从 channel 管道中添加/删除处理程序本身时进行注册。调用注册时,不会调用取消注册,因为 channel 关闭后管道仍然存在。

您应该使用channelActive()channelInactive()为了你想要它们的目的。当 channel 处于 Activity 发送状态时,ChannelActive 被触发,对于服务器,这通常在 channelRegistered 之后直接发生,对于客户端,它在建立套接字连接后发生。当在本地套接字上调用 close() 时,或者远程端关闭/终止连接时,会调用 channelInactive(),您可以依靠此方法来执行本地操作清理。

关于java - Netty中客户端(浏览器)退出时如何从管道中删除 channel ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25308113/

相关文章:

java - 如何在 Java 中将 char 转换为 int?

Java JDBC-ODBC 无法加载 Excel 驱动程序

java - UTF-16 分成 2 个字符

java - java netty(客户端/服务器)设置中的 TLS 服务器和普通 TCP 客户端(通过本地 LAN)

java - Netty通过一个 channel 写入多条消息

java - 如何在 Twitter Finagle 中禁用缓存?

java - SpringMVC 需要登录才能使用 session 查看页面

java - System.out.println - 这个方法在 Java 中是链式的吗?

java - 哪个框架/lib可以帮助我在java上快速开发代理服务器?

netty - 如何在 Netty 4 中处理 PING/PONG 帧?