Linux+Nginx+SpringBoot+War环境下websocket部署遇到的问题

springboot项目中集成了websocket之后,本地测试正常,但是部署到服务器之后,容易遇到的几个问题。

本文指的服务器环境 为Linux+Nginx 其他环境可能不适用

问题一、pom文件的依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-websocket</artifactId>
            <scope>provided</scope>
        </dependency>

如果打包方式是War,项目会由外部Tomcat管理,此时这个依赖是不需要的,因为Tomcat7以及7以上的版本对websocket是直接支持的。因此可以将作用域设置为provided,Tomcat 8以下的版本似乎会与此依赖冲突,8以及8以上不冲突(未严格测试过)。

问题二、ServerEndpointExporter@Bean

   @Bean
    public ServerEndpointExporter serverEndpointExporter() {
        return new ServerEndpointExporter();
}

问题二与问题一的原因类似,在本地测试的时候,项目是Spring管理,因此需要ServerEndpointExporter这个bean,但通过War部署会将项目交给外部Tomcat管理,ServerEndpoint是需要Tomcat直接管理才能生效,ServerEndpointExporter @Bean的存在会导致管理权交接失败,项目无法启动。
所以部署之前,需要将bean ServerEndpointExporter注释掉,或者通过@Profile()设置为测试环境生效。

问题三、连接报404或者400
WebSocket connection to ‘ws://xxx:8080/xxx’ failed: Error during WebSocket handshake: Unexpected response code: 404
此问题是Nginx未开启websocket穿透支持导致。
需要在Nginx的配置文件中加入

location / {
    // 加入这三行
    proxy_http_version 1.1; 
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    //
}

如果是在宝塔面板环境,则在此站点的配置文件中加入。
重启Nginx便可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值