java spring 服务器关闭连接_java springboot websocket 服务 服务器主动关闭连接 导致 抛出java.io.EOFException异常...
遇到這個問題不要慌,去查查眾說紛紜。那我就在這里總結(jié)一下吧
存在此問題的有以下幾種情況
1、ws連接不穩(wěn)定經(jīng)常斷線;
答:
1)可能是客戶和服務(wù)器之間的網(wǎng)絡(luò)問題
2)可能是服務(wù)端內(nèi)存不夠用導(dǎo)致線程被異常清理
2、ws連接成功后過一點(diǎn)時間后就自動斷開
答:
1)一般情況下是nginx轉(zhuǎn)發(fā)或者 tomcat的連接超時導(dǎo)致容器層主動關(guān)閉這個連接
(1)修改容器層tomcat或者nginx【proxy_read_timeout 5000s; keepalive_timeout 5000s;】配置即可,但是治標(biāo)不治本不推薦
(2)服務(wù)端主動向客戶端發(fā)送心跳消息的發(fā)送,不推薦,因為會導(dǎo)致服務(wù)端負(fù)荷
(3)客戶端主動向服務(wù)端發(fā)送心跳消息,我個人情況下比較推薦這種方案
3、ws連接之后服務(wù)端由于鑒權(quán)失敗等各種原因服務(wù)器主動關(guān)閉連接導(dǎo)致拋出該異常
答:解決代碼在下面【重點(diǎn)在于CloseReason.CloseCodes.TLS_HANDSHAKE_FAILURE錯誤碼,當(dāng)你使用這個錯誤碼會導(dǎo)致io錯誤,意思是握手失敗】
/**
* 操作進(jìn)行下線
* @param session
*/
public void optClose(Session session){
// 判斷當(dāng)前連接是否還在線
if (session.isOpen()){
try {
// 關(guān)閉連接
CloseReason closeReason = new CloseReason(CloseReason.CloseCodes.NORMAL_CLOSURE,"鑒權(quán)失敗!");
session.close(closeReason);
} catch (IOException e) {
e.printStackTrace();
}
}
}
注意:當(dāng)發(fā)生異常錯誤時,應(yīng)該及時關(guān)閉連接并且處理相關(guān)用戶的上下線操作!
原文:https://www.cnblogs.com/qianxiaoPro/p/14336412.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的java spring 服务器关闭连接_java springboot websocket 服务 服务器主动关闭连接 导致 抛出java.io.EOFException异常...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 20.98万元起 2023款比亚迪唐DM
- 下一篇: json反射java对象_Jackson