tomcat7 spring boot应用程序中的websockets
Posted
技术标签:
【中文标题】tomcat7 spring boot应用程序中的websockets【英文标题】:websockets in tomcat7 spring boot app 【发布时间】:2017-06-21 12:45:42 【问题描述】:我有一个要部署到 tomcat 7.0.78 实例的 Spring Boot War 文件。网络应用程序启动正常,但网络套接字不工作。它们在嵌入式 tomcat 环境中运行良好,例如运行./gradlew bootRun
。
我在 Chrome 控制台中遇到的错误是:
angular.js:14525 Possibly unhandled rejection: Whoops! Lost connection to http://localhost:8080/websock
我尝试将tomcat连接器设置为使用Http11NioProtocol,但似乎没有效果。
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443" />
我也试过设置成ROOT.war,然后浏览显示:WebSocket connection to 'ws://localhost:8080/websock/424/wzkek0zw/websocket' failed: Error during WebSocket handshake: Unexpected response code: 500.
我缺少正确启用 websockets 的 tomcat 配置文件中的某些内容吗?我的网络套接字配置类如下所示:
@Configuration
@EnableWebSocketMessageBroker
@EnableWebSocket
public class WebSocketConfiguration extends AbstractWebSocketMessageBrokerConfigurer
@Override
public void configureMessageBroker(MessageBrokerRegistry config)
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
@Override
public void registerStompEndpoints(StompEndpointRegistry registry)
registry.addEndpoint("/websock").setAllowedOrigins("*").withSockJS();
我没有编辑 web.xml 中的任何内容,只更改了 server.xml 中的连接器协议。
更新: 我的部分问题是我的连接尝试前面有一个斜线,例如 $stomp.connect('/websock'),所以我把它改成了 $stomp.connect('websock')。这在 tomcat 的 windows 安装上工作正常,但在 ubuntu 安装上不起作用。我必须在我的 javascript 中明确告诉它连接到 http://localhost:8080/websock,但随后在尝试连接到 Web 套接字时出现错误:
webSocket connection to 'ws://localhost:8080/websock/940/qdb1xkkp/websocket' failed: Error during WebSocket handshake: Unexpected response code: 404
【问题讨论】:
查找我发现的堆栈跟踪:***.com/a/23546192/592355 ...听起来很可能是org.apache.tomcat.websocket
和javax.websocket
之间的版本/实现冲突
你是对的。我曾尝试添加 javax.websocket,但它导致了更多问题。部分问题是连接时我的路径错误,但我仍然遇到问题。现在更新答案。
【参考方案1】:
我的问题是,在通过 stomp 连接到套接字之前,我必须正确获取基本 URL:
var getUrl = window.location;
var baseUrl = getUrl .protocol + "//" + getUrl.host + "/" + getUrl.pathname.split('/')[1];
$stomp.connect(baseUrl + '/websock', )
【讨论】:
以上是关于tomcat7 spring boot应用程序中的websockets的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot Tomcat部署不起作用Tomcat 7
使用 JPA 进行 Spring Boot 数据源配置 [关闭]
Spring Boot:在 Tomcat 7 上部署 WAR
在 Tomcat 6 中部署 Spring Boot 应用程序(传统部署)