【问题标题】:Wicket Web Sockets cannot work with multiple browser windowsWicket Web Sockets 不能与多个浏览器窗口一起使用
【发布时间】:2017-01-16 14:29:27
【问题描述】:

我在 Wicket 中创建了一个 Web-Socket 应用程序,该应用程序有一个将消息推送到所有客户端的服务器。在注册客户端(应用程序、sessionId 和 Key (PageId))后,服务器会推送消息。到目前为止,一切都很好。但是如果我在同一个客户端上有同一个浏览器的多个浏览器窗口,那么只有一个窗口接收到消息并处理它。

所有浏览器窗口(同一个浏览器)是否共享同一个 sessionId?如果是,它们之间有什么区别吗?

【问题讨论】:

    标签: websocket wicket


    【解决方案1】:

    所有浏览器(来自同一供应商,例如 Firefox)将共享相同的会话 ID。但是如果页面 id 不同,那么将会有单独的 Web 套接字注册,并且它们都将有自己的连接,即它们都将能够发送/接收消息。

    如果您需要在用户为同一页面 ID 打开第二个选项卡/窗口时由 Wicket 通知您,请在页面上使用 org.apache.wicket.ajax.AjaxNewWindowNotifyingBehavior。您很可能希望使用setResponsePage(page.getClass()) 来创建同一页面的新实例并为其建立新的 WebSocket 连接。

    【讨论】:

    • 嗨,我也在为同样的问题而苦苦挣扎。您提出的解决方案有一个问题 - 呈现新选项卡的页面 - 建立了新的 websocket 连接(并覆盖连接注册表中的先前连接),然后通知您这是一个新选项卡。但是您已经丢失了对先前连接的引用。有什么想法吗?
    • 我试过RequestCycleListener 来检查onRequestHandlerResolved 处理程序是否是已打开websocket 连接的现有页面实例的RenderPageRequestHandler。如果是这样,则将其替换为新页面的新处理程序。这很好用,但我无法区分新标签和当前标签的刷新。
    猜你喜欢
    • 1970-01-01
    • 2018-04-01
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 2017-08-18
    • 1970-01-01
    • 2019-02-25
    相关资源
    最近更新 更多