使用websocket弹簧初始化的长轮询后退

时间:2013-05-02 18:08:09

标签: java spring websocket cometd

我正在使用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

1 个答案:

答案 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));