websocket自动断开连接,并抛出EOFException异常

项目要做一个后台消息发送,在测试过程中,发现每隔1分半自由,WebSocket会走OnError方法,将异常抛出,异常是java.io.EOFException.然后走@OnClose方法,将连接自动关闭.怀疑是nginx默认60秒断开连接的原因.于是本地搭建一个nginx,将proxy_read_timeout 设置为 5000s,结果并没什么用,经过检查,发现原nginx.conf文件中 的keepalive_timeout 65设置将我们这个设置的时间给覆盖了,将其重新设置即可.

java.io.EOFException
	at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1206)
	at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.read(NioEndpoint.java:1140)
	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:53)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:745)

nginx的设置为:

location /{
	    proxy_pass http://xx.xxx.xxx.xx:xxxx;
	    proxy_http_version 1.1;
	    proxy_set_header Upgrade $http_upgrade;
	    proxy_set_header Connection "upgrade";
	    proxy_read_timeout 5000s;
		keepalive_timeout  5000s;
        proxy_set_header   Host    $host;
	    proxy_set_header   X-Real-IP   $remote_addr;
	    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
	}

尽管设置5000s,但是当到达设置时间,如果websocket没有进行通讯,还是会断开连接.可以前端做一个心跳检测,每隔5分钟发起一次通信就行.

希望能帮到你;

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
WebSocket并不总是断开连接WebSocket的连接状态取决于多种因素,包括网络环境、服务器配置以及客户端代码等。当出现某些情况时,WebSocket可能会断开连接。以下是一些可能导致WebSocket断开连接的常见原因: 1. 网络问题:如果客户端或服务器之间的网络连接不稳定,或者网络中存在阻止WebSocket连接的防火墙或代理服务器,可能会导致WebSocket断开连接。 2. 服务器问题:如果服务器端出现故障、重启或关闭,或者服务器端的WebSocket服务不可用,也会导致WebSocket断开连接。 3. 客户端问题:如果客户端的代码实现有错误、逻辑问题或内存泄漏,也可能导致WebSocket断开连接。 4. 协议问题:如果WebSocket协议版本不匹配、握手失败或发生其他协议相关的问题,也可能导致WebSocket断开连接。 为了更好地排查WebSocket连接断开的原因,您可以在WebSocket的onclose事件处理程序中打印错误信息。根据您提供的代码示例,您可以在断开连接时打印出错误信息,包括错误码、原因和断开状态等。这样可以帮助您更好地理解为什么WebSocket连接断开。 请注意,您提到了在浏览器中运行WebSocket聊天室的问题。如果您遇到了连接问题,可能是由于您在浏览器中的代码实现有问题,或者受到浏览器的安全策略限制。建议您检查您的代码实现并确保它符合WebSocket的规范和要求。您可以参考WebSocket相关的文档和示例来获取更多的帮助和指导。 总结来说,WebSocket连接断开的原因可能涉及网络问题、服务器问题、客户端问题和协议问题。通过打印错误信息和检查代码实现,您可以更好地了解和解决WebSocket连接断开的问题。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值