使用springboot建立ws连接 第一次连接成功并发送消息需要5秒 怎么缩短时间 大佬们
@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
registry.addHandler(myFormWebSocketHandler(), "/form").setAllowedOrigins("*")
.addInterceptors(myWebSocketInterceptor());
}
用这种写法注册的ws端口 然后服务到afterConnectionEstablished(WebSocketSession session)
方法 已经过了五秒了
补充一下:
这里在前置和后置之间 用来五秒 这里应该是握手验证 是这样导致的吗?
跟踪源码 发现在这行很慢 this.handshakeHandler.doHandshake(request, response, this.wsHandler, attributes);’
继续跟踪源码 发现是获取本地的ip+端口这里很慢 localAddr = request.getLocalAddress(); 所以有可能是本地防火墙策略规则过于复杂?
按照回答的加上了
但是很遗憾 还是没有解决 也许是我加的不对?
网上找了很多文章 都说是linux下dns解析 映射的host需要加上主机名才可以解决 但是我这边试了很多次 加上主机名并刷新了服务器的dns 缓存都还是一样的效果 从日志来看 方法执行到获取本地ip还是很慢 目前还在解决中。。。。
刷新缓存sudo resolvectl flush-caches
希望可以缩短第一次连接的时间
很离谱 在跟踪源码发现是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 \
docker system prune -f
这里去掉指定host