许多客户端(浏览器)可以通过 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/