Tomcat websocket 管理和识别



我正在尝试实现一个Web套接字会话管理器,我刚刚遇到了一个障碍,我希望有人可以帮助我。

基本上,客户端将使用我的 websocket 服务器端点启动 Web 套接字会话,我将获取 HTTP 请求参数,解析它并订阅 Web 服务生产者端点。Web 服务将返回一个包含订阅标识符的响应,该订阅标识符将用作键映射(以及 HTTP 会话 ID(,以与会话对象一起添加到 Java 映射缓存中。继续将数据发送到我发布的 Web 服务使用方终结点。然后,我的应用程序将获取从生产者接收的数据,使用每个数据包附带的订阅 ID,并在映射缓存中找到正确的会话以将数据发送回去。

这是我的问题..

我注意到,如果客户端在浏览器中打开另一个选项卡并发送第二个订阅请求,它仍将使用相同的 HTTP 会话 ID 发送,但 tomcat 仍然能够将数据流式传输到正确的选项卡。这意味着 tomcat websocket 实现具有内置的多路复用处理机制。

为了排除一些不必要的细节,除非被问到,我还希望能够识别在同一会话ID下多路复用的所有通道。但是我在 API 中找不到任何方法来识别它。因为我需要能够查找我的地图缓存并删除已关闭的选项卡的会话(这会在我的 Web 套接字端点中触发关闭方法(,但我无法做到这一点,因为可能有许多套接字/通道与相同的 HTTP 会话 ID 相关联。

websocket 框架不提供任何这样的实现。每个选项卡都会打开一个新套接字。您可以通过在启动 websocket 时在请求中添加密钥来维护会话信息,并在消息中检查服务器中的该密钥(例如 JSESSION ID 值(并相应地提供请求。

相关内容

  • 没有找到相关文章

最新更新