当客户端(浏览器)退出netty时,如何从管道中删除通道?

时间:2014-08-14 12:28:40

标签: java netty

许多客户端(浏览器)可以通过websockets连接到我的服务器(netty-server)。我想要的是,无论何时客户端关闭选项卡(他连接到我的服务器的URL),与他关联的通道也应该取消注册。但这不会自动发生,因为我已经创建了一个hashset并添加了客户端ip到channelRegistered(..)方法中的哈希集,并在channelUnregistered(..)方法中从hashset中删除了ip。但它没有被删除。如果客户端退出浏览器(或者他连接的标签),还有另一种方法可以取消注册频道。谢谢。

1 个答案:

答案 0 :(得分:0)

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

您应该将channelActive()channelInactive()用于您想要的目的。当通道处于活动状态以进行发送时会触发ChannelActive,而服务器通常会在channelRegistered之后直接发生,而客户端则在发生套接字连接后发生。在本地套接字上调用channelInactive()时调用close(),或者远程端关闭/终止连接,可以依靠此方法进行本地清理。