java spring 服务器关闭_java springboot websocket 服务 服务器主动关闭连接 导致 抛出java.io.EOFException异常...

遇到这个问题不要慌,去查查众说纷纭。那我就在这里总结一下吧

存在此问题的有以下几种情况

1、ws连接不稳定经常断线;

答:

1)可能是客户和服务器之间的网络问题

2)可能是服务端内存不够用导致线程被异常清理

2、ws连接成功后过一点时间后就自动断开

答:

1)一般情况下是nginx转发或者 tomcat的连接超时导致容器层主动关闭这个连接

(1)修改容器层tomcat或者nginx【proxy_read_timeout 5000s; keepalive_timeout 5000s;】配置即可,但是治标不治本不推荐

(2)服务端主动向客户端发送心跳消息的发送,不推荐,因为会导致服务端负荷

(3)客户端主动向服务端发送心跳消息,我个人情况下比较推荐这种方案

3、ws连接之后服务端由于鉴权失败等各种原因服务器主动关闭连接导致抛出该异常

答:解决代码在下面【重点在于CloseReason.CloseCodes.TLS_HANDSHAKE_FAILURE错误码,当你使用这个错误码会导致io错误,意思是握手失败】

/**

* 操作进行下线

* @param session

*/

public void optClose(Session session){

// 判断当前连接是否还在线

if (session.isOpen()){

try {

// 关闭连接

CloseReason closeReason = new CloseReason(CloseReason.CloseCodes.NORMAL_CLOSURE,"鉴权失败!");

session.close(closeReason);

} catch (IOException e) {

e.printStackTrace();

}

}

}

注意:当发生异常错误时,应该及时关闭连接并且处理相关用户的上下线操作!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值