将 Websocket 与 Tomcat 一起使用

Posted

技术标签:

【中文标题】将 Websocket 与 Tomcat 一起使用【英文标题】:using Websockets with Tomcat 【发布时间】:2015-05-22 12:29:22 【问题描述】:

我正在尝试使 this 示例工作

但是当我将war文件部署到Tomcat并启动时,无法建立连接。

在浏览器控制台中,我看到客户端尝试连接到http://localhost:8080/Spring4WebSocket/add/info 并接收404,尽管在 start.jsp 中指定的连接 URL 是 /Spring4WebSocket/add(最后没有那个“/info”部分)。

为什么这个奇怪的“/info”后缀被添加到 url 中,我可以做些什么来改变它并让这个例子正常工作?

此解决方案对我没有帮助: SockJs - 'info' path not found

【问题讨论】:

你用的是什么版本的tomcat?你需要 7.0.52+ 版本为 7.0.59。 【参考方案1】:

/info URL 被 SockJS (see docs) 调用:

...在客户端启动会话之前。它用于检查服务器功能(websocket 支持、cookie 要求)并获取“origin”设置的值(当前未使用)。

我查看了您所遵循的示例,但没有发现任何问题。它紧跟 Spring 指南:Using WebSocket to build an interactive web application,所以它应该可以工作。

不过只有一个问题。您是否完全按照说明操作或从页面下载了 zip 文件,还是您自己创建的?您在此处的第一个 SockJS 请求中收到该错误:

var socket = new SockJS('/Spring4WebSocket/add');

您的应用程序是否也称为Spring4WebSocket 或其他名称?如果它被称为其他东西,请改用它:

var socket = new SockJS('/YourAppNameGoesHere/add');

【讨论】:

是的,这是我检查的第一件事。我的应用程序就是这样调用的。无论如何感谢您的回答。 @user2246018:我已经下载并安装了您发布的链接附带的项目,它可以正常工作。你检查过你的代码吗?有什么不同吗?您的 WebAppInitializer.onStartup 方法是否被调用来加载 Spring 上下文?

以上是关于将 Websocket 与 Tomcat 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

关于 websocket 的说明

将 c++ wss 服务器与 websocket++ 或其他 c++ websocket lib 一起使用

如何将 .NET WebSocket 客户端与 NTLM 代理一起使用?

使用 nginx 的 Websocket 代理不适用于 tomcat。

将客户端证书与 WebSocket4Net 一起使用

将 Tomcat NTLM 与 Spring Security 一起使用