问题描述
系统在本地开发测试时Websocket连接很正常,都是秒连。但打包完部署到linux上运行,Websocket连接特别慢,平均要花10秒左右才能建立连接。
框架结构
整体采用前后端分离开发:
前端:Vue.js+sockjs-client+Webstomp-client
后端:Springboot+WebStomp
关于前后端Websocket具体实现,可移步我的另一篇博客:
前后端分离WebSocket +Springboot 实战详解
过程
排除了网络问题之后,在一步步的Debug之中,拨开了Bug的层层面纱。最终发现原来是Java原生方法InetAddress.getLocalHost()的坑~
在websocket连接过程中,会将http协议升级为websocket协议,在升级过程中,调用了InetAddress.getLocalHost(),而这个方法的底层获取依赖于JDK原生InetAddress类的操作。
下面是JDK中InetAddress类的描述
-
InetAddress Caching
- The InetAddress class has a cache to store successful as well as unsuccessful host name resolutions.
By default, when a security manager is installed, in order to p