网站升级https访问,webscoket升级wss问题

前段时间,网站访问由http变更为https,但是由于webscoket功能受到影响,报错如下:webscoket报错
跟前端沟通解决方式问题,前端回复说很麻烦,暂时不要做了。

今天突发奇想,我是不是可以在nginx中修改配置,在前端打包给我的js文件中,修改webscoket路径也能解决这个问题。
1>
原js中配置的websocket地址为:119.3..:9080,修改为目前的网站域名,去掉端口号;
2>
修改nginx配置文件,因为原来是直接ip端口访问,nginx中并未配置相关信息,所以此处为添加配置信息:

location /websocket/ {	          
		proxy_pass http://127.0.0.1:9080/websocket/;	
		#这个version一定要带这,不然nginx不认为他是一个webscoket访问,直接给你返回400
        proxy_http_version 1.1;
		proxy_set_header Upgrade $http_upgrade;
		proxy_set_header Connection "upgrade";
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

注意:websocket配置,千万不要将其他的配置复制粘贴了之,我起初就是粘贴复制的,发现一直有问题,原来是多复制了个proxy_pass_header User-Agent;
3>
设置定时任务,因为nginx默认的连接超时时间为60s,我改成120s之后,还是会抛出异常:

java.io.EOFException
	at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1231)
	at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.read(NioEndpoint.java:1141)
	at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:72)
	at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:171)
	at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:151)
	at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:148)
	at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:54)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:59)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1594)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:748)

所以我设置了一个定时任务,30秒发一条信息到前端,前端收到后,再给我返回一条信息,
网站升级https访问,webscoket升级wss问题_第1张图片
这里呢,我的是springboot项目,因为定时任务和websocket不能同时启动,所以从某网站cv了一段代码

@Configuration
public class ScheduledConfig {
    @Bean
    public TaskScheduler taskScheduler(){
        ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
        taskScheduler.setPoolSize(10);
        taskScheduler.initialize();
        return taskScheduler;
    }
}

然后配置定时任务

@Scheduled(cron = "0/30 * * * * ?")
public void sentHeartBeadTask() {
    #方法自己定义,我这里是这样的,发送消息就简单了,不用贴代码了吧。
	msgWebSocket.KeepThread();
}

最后,我还是想让前端处理一下,每次修改服务器,都要改js中域名的问题。

学习这个东西呢,还是自己催着自己走,啥都可以试一试,万一成功了呢?

你可能感兴趣的:(分享)