【问题标题】:Long Polling fallback with websocket spring initialization使用 websocket spring 初始化的长轮询后备
【发布时间】:2013-05-04 01:11:32
【问题描述】:

我正在使用 Spring 注释来初始化我的 BayeuxServer。我通过在我的 Spring bean 中设置传输来启用 websocket -

 BayeuxServerImpl bean = new BayeuxServerImpl();

 bean.setTransports(new WebSocketTransport(bean));

但是现在,当 websocket 连接失败或在js($.cometd.websocketEnabled = false;) 中被禁用时,它不会成功回退到长轮询。它在萤火虫控制台中抛出错误"400 Unknown Bayeux Transport"

我无法在setTransports 中设置LongPollingTransport,因为LongPollingTransport 是库中的一个抽象类。我尝试创建一个扩展LongPollingTransport 的类并在setTransports API 中指定它,但这也不起作用。如果我做错了什么,请告诉我。如果 websocket 失败,我们需要长轮询才能工作。

cometd 版本:2.5.1

码头版本:7.6.8

【问题讨论】:

    标签: java spring websocket cometd


    【解决方案1】:

    通过仅使用一种传输方式调用 BayeuxServer.setTransports(...),您基本上会禁用任何回退功能,因为您明确告诉 CometD 仅使用一种传输方式。

    LongPollingTransport 类有 2 个子类,具体取决于使用的具体机制;你可能想使用JSONTransport类。

    请注意,CometD documentation 有一个使用 XML 的 how to setup WebSocket with Spring 示例,但将 XML 转换为代码以使其与注释一起使用就足够了。

    基本上,这一切都归结为:

    bayeuxServer.setTransports(new WebSocketTransport(bayeuxServer), new JSONTransport(bayeuxServer));
    

    【讨论】:

    • 谢谢西蒙娜。那行得通。实际上我之前尝试过,但我认为我使用了JSONPTransport 而不是JSONTrasport。并没有真正注意这一点。我的错。再次感谢!
    猜你喜欢
    • 2023-03-17
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    相关资源
    最近更新 更多