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

posted @ 2020-07-03 16:11  黄进广寒  阅读(2141)  评论(0编辑  收藏  举报