windows運行正常但是linux下程序在瀏覽器控制台console報websocket is closed before the connection is established


原因:

連接socket時需要通過IP獲取到對應主機的域名來進行連接,此過程會相當耗時
前端有一個超時時間,導致無法在規定時間內收到服務端消息而觸發超時操作
表現:

windows及linux下可不同時出現,與DNS解析的配置有關
瀏覽器console界面會打印大量websocket is closed 錯誤消息
可能伴隨着刷新很慢之類的相關異常現象
解決方法:

1 在hosts文件中添加對應IP的反解析,如:示例IP IP ,其中IP為服務機器的內網地址,無效則自己通過堆棧在某個地方debug代碼來確認

 

   我是通過第一種辦法解決的;

    sudo vim /etc/hosts  (通過hostnamectl獲取機器名)

    追加一行

    內網IP 機器名全稱 機器名(去掉.后綴)
實例:
    192.168.0.11    AP-SHA-VM-P85.internal.sungard.corp AP-SHA-VM-P85

 

2 重寫SocketWrapperBase類的getLocalName方法,直接返回其私有屬性localAddr。此處不做贅述,存在多個類可用於重寫代碼,根據需要自己合理選擇
3 修改DNS相關配置(可能還存在其他相關配置,個人沒有找到方法1外的相關配置,故無法給出實際例子)
推薦:

      卡頓的時候可以使用JDK自帶工具進行分析

       獲取程序進程號

JPS
       獲取當前程序的堆棧

JSTACK PID > stack.log

原文鏈接:https://blog.csdn.net/qq_36759091/article/details/99404743


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM