我正在使用Spring注释来初始化我的BayeuxServer。我通过在Spring bean中设置传输来启用websocket -
BayeuxServerImpl bean = new BayeuxServerImpl();
bean.setTransports(new WebSocketTransport(bean));
但是现在,当websocket连接失败或在js($.cometd.websocketEnabled = false;)
中被禁用时,它不会成功地回退到长轮询。它在firebug控制台中抛出错误"400 Unknown Bayeux Transport"
。
我无法在LongPollingTransport
中设置setTransports
,因为LongPollingTransport
是库中的抽象类。我尝试创建一个扩展LongPollingTransport
并在setTransports
API中指定它的类,但这也不起作用。如果我做错了,请告诉我。我们需要长时间的轮询才能在websockets失败的情况下工作。
cometd版本:2.5.1
码头版本:7.6.8
答案 0 :(得分:1)
通过仅使用一个传输调用BayeuxServer.setTransports(...)
,您基本上禁用任何后备功能,因为您明确告知CometD仅使用1个传输。
类LongPollingTransport
有2个子类,具体取决于使用的具体机制;您可能想要使用课程JSONTransport
。
请注意,CometD documentation有一个使用XML的how to setup WebSocket with Spring示例,但它足以将XML转换为代码以使其使用注释。
基本上,这一切归结为:
bayeuxServer.setTransports(new WebSocketTransport(bayeuxServer), new JSONTransport(bayeuxServer));