springboot+sockjs+stomp局域网通信问题?

发布于 2022-09-12 22:49:00 字数 182 浏览 18 评论 0

用springboot搭建的服务,需要websocket通知前端
使用的是sockjs+stomp
在本机通过127.0.0.1和localhost可以建立连接
在外网通过域名可以访问
但是通过本机局域网ip192.168.1.xxx却无法建立连接
尝试过关闭防火墙也还是不行
想问下大家这种情况有没有什么解决思路

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

空城仅有旧梦在 2022-09-19 22:49:00

更新了一下问题,通过其他方式搭建的websocket没有问题。
再次测试SockJS仅保留websocket模式,由于一直遇到

WebSocket connection to 'ws://' failed: WebSocket is closed before the connection is established.

所以尝试将timeout设置为一个特别大的数字,如下

var socket = new SockJS('/endpointTest', undefined, {transports: ['websocket'], timeout: 100000});

发现可以建立连接了,就是打开过程很慢(固定30s),通过定位后端代码,发现慢在AbstractHandshakeHandler类的doHandshake方法中

this.requestUpgradeStrategy.upgrade(request, response, subProtocol, extensions, user, wsHandler, attributes);

进一步定位在AbstractStandardUpgradeStrategy类中upgrade方法的

InetSocketAddress localAddr = null;
try {
    // 问题点
    localAddr = request.getLocalAddress();
}
catch (Exception ex) {
    // Ignore
}

request.getLocalAddress()会调用InetAddress类的getHostName(),最终调用getHostFromNameService
这里面会用ip去解析hostname,环境中解析不到所以解析超时。
在家里面的内网就能立刻建立连接,在/etc/resolv.conf中第一行是search xx,通过nslookup 192.168.xxx.xxx可以解析。

只等公子 2022-09-19 22:49:00

如果是公司的网络 可以看一下是否使用代理了,我也碰到过,加一个websocket代理规则就可以了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文