我正在使用 Spring 注释来初始化我的 BayeuxServer。我通过在 Spring bean 中设置传输来启用 websocket -
BayeuxServerImpl bean = new BayeuxServerImpl();
bean.setTransports(new WebSocketTransport(bean));
但是现在,当 websocket 连接失败或在 js($.cometd.websocketEnabled = false;)
中被禁用时,它不会成功回落到长轮询。它抛出错误 "400 Unknown Bayeux Transport"
在 Firebug 控制台中。
我无法设置LongPollingTransport
在setTransports
自 LongPollingTransport
是库中的抽象类。我尝试创建一个扩展 LongPollingTransport
的类并在 setTransports
中指定它API,但这也不起作用。如果我做错了什么,请告诉我。我们需要长时间轮询才能工作,以防 Websocket 失败。
cometd 版本:2.5.1
jetty 版本:7.6.8
最佳答案
通过仅使用一种传输方式调用 BayeuxServer.setTransports(...)
,您基本上可以禁用任何回退功能,因为您明确告诉 CometD 仅使用 1 种传输方式。
LongPollingTransport 类有 2 个子类,具体取决于要使用的具体机制;您可能想使用 JSONTransport
类。
请注意 CometD documentation有一个例子 how to setup WebSocket with Spring使用 XML,但将 XML 转换为代码以使其与注释一起使用就足够了。
基本上,这一切都归结为:
bayeuxServer.setTransports(new WebSocketTransport(bayeuxServer), new JSONTransport(bayeuxServer));
关于java - 使用 websocket spring 初始化进行长轮询回退,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16344833/