我正在通过netty websocket开发一个聊天服务器。我们的客户端主要是基于浏览器的。发生的事情是,当我刷新浏览器时,它会关闭 websocket 连接并丢失所有内容,并在再次加载浏览器时创建一个新套接字。是否有任何机制可以在服务器端与我以前的 websocket 会话重新连接。
我计划缓存所有用户会话,如果从客户端收到任何连接关闭事件,则无需删除用户会话信息,等待 30-60 秒,如果服务器从同一客户端收到新的连接请求(通过 cookie id 检测),则替换为新的会话信息。
我的问题是,如果我在服务器收到连接关闭事件时不删除会话,则通过此会话的通道进行其他读/写操作会产生问题。
我从下面可以理解的是
我的问题是,如果我在服务器收到连接关闭事件时不删除会话,则通过此会话的通道进行其他读/写操作会产生问题。
聊天逻辑与通道/通道处理程序对象紧密耦合。
如果您可以将聊天逻辑移动到我称为"会话"的单独类中,并在该类中具有 onEventXXX 回调,并在其上具有聊天逻辑(可能是单独的类链),当有写入操作时,使用 session.write(..."会话"必须将其委托给底层通道。
当基础通道关闭时,您可以保留"会话"对象一段时间,然后重新附加它的新通道。
为此,您可能需要创建一个名为"SessionHandler"的单独 Netty 处理程序并处理通道事件/会话创建。