springboot中ws连接时间问题?

使用springboot建立ws连接 第一次连接成功并发送消息需要5秒 怎么缩短时间 大佬们

@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
    registry.addHandler(myFormWebSocketHandler(), "/form").setAllowedOrigins("*")
            .addInterceptors(myWebSocketInterceptor());
}

用这种写法注册的ws端口 然后服务到afterConnectionEstablished(WebSocketSession session)
方法 已经过了五秒了

补充一下:image.png
这里在前置和后置之间 用来五秒 这里应该是握手验证 是这样导致的吗?

跟踪源码 发现在这行很慢 this.handshakeHandler.doHandshake(request, response, this.wsHandler, attributes);’

继续跟踪源码 发现是获取本地的ip+端口这里很慢 localAddr = request.getLocalAddress(); 所以有可能是本地防火墙策略规则过于复杂?

按照回答的加上了
image.png
但是很遗憾 还是没有解决 也许是我加的不对?

网上找了很多文章 都说是linux下dns解析 映射的host需要加上主机名才可以解决 但是我这边试了很多次 加上主机名并刷新了服务器的dns 缓存都还是一样的效果 从日志来看 方法执行到获取本地ip还是很慢 目前还在解决中。。。。
image.png
刷新缓存sudo resolvectl flush-caches

希望可以缩短第一次连接的时间

阅读 594
2 个回答

很离谱 在跟踪源码发现是ip端口获取问题后 我在本地查看了ipconfig 本地有多个虚拟网卡 在关闭这些虚拟网卡 在重新打开后 发现ws时间进入了毫秒级 恢复正常了 但是线上依旧是10秒左右,仍未解决

大佬出手了 在我实在解决不了的情况下 大佬换个思路 不使用host网络 改用 运行新容器(使用 bridge 网络 + 端口映射)成功解决了问题 这里膜拜大佬

贴一下怎么修改的
docker pull $image
docker stop $server_name && docker rm -f $server_name
docker run -it -d --name=$server_name --restart=always \

   -m 3GB **--network host \**
   -v /etc/localtime:/etc/localtime \
   -e NACOS_HOST=$NACOS_HOST -e NACOS_PORT=$NACOS_PORT -e NACOS_USERNAME=$NACOS_USERNAME -e NACOS_PASSWORD=$NACOS_PASSWORD \
   -e SERVICE_NAME=$server_name -e PROFILES=$profiles \
   $image

docker system prune -f
这里去掉指定host

应该不是写法的问题,感觉是你环境的问题,理论上不会出现5秒的时间的,需要你检查一下环境,或者更换一下应用环境,看看其他环境下还会不会出现这个问题

image.png

推荐问题