java - 使用 websocket spring 初始化进行长轮询回退

标签 java spring websocket cometd

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

 BayeuxServerImpl bean = new BayeuxServerImpl();

 bean.setTransports(new WebSocketTransport(bean));

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

我无法设置LongPollingTransportsetTransportsLongPollingTransport是库中的抽象类。我尝试创建一个扩展 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/

相关文章:

java - 附件损坏签名第 2 部分

java - xsl :apply-templates/xsl:with-param with Xalan-J and saxon compared to xsltproc 的意外行为

java - Android 从 mySql 中获取数据

java - 如何将当前连接从 Spring 上下文传递到 iReport?

java - Spring @transactional 与 mode=aspectj 行为异常

java - 是否可以序列化 WebSocket 连接对象并在另一台服务器上重用它?

flutter - Websocket 在 Flutter web 上干净地断开连接

java - toplink 排序按预分配大小跳转

java - Spring环境无法解析占位符

java - 无法连接到 wss [更新]