请教一下 websocket 前后端分离,在一个局域网内联调的问题?

2024-02-23 09:41:09 +08:00
 laaaaaa

环境

服务端:springboot websocket ( spring-boot-starter-websocket 包) JDK8
客户端:vue 原生 websocket

问题

现在我服务端已经搭建好 websocket 服务了,然后我通过测试工具测试,但是只能用本地地址连接;

ws://127.0.0.1:7000/websocket/{sid} 是可以正常的
ws://192.168.0.10:7000/websocket/{sid}  内网地址是不能连接

在网上看了很多,试了一下都不行,请教一下大佬们,如果一个局域网内 内网 Ip 如何建立链接,并联调呀~

代码

```
端点
@Slf4j
@Component
@ServerEndpoint("/websocket/{sid}")
public class SerialWebSocket {
	public void onOpen();
    public void onClose();
    ....
}

配置
@Configuration
public class WebSocketConfiguration {

    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
        return new ServerEndpointExporter();
    }

}
```

另一种写法

```
 @Configuration
 @EnableWebSocket
 public class WebSocketConfig implements WebSocketConfigurer {

   @Override
   public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
       registry.addHandler(ncdWebSocketHandler(), "/websocket")
            .setAllowedOrigins("*");
   }

   @Bean
   public WebSocketHandler ncdWebSocketHandler() {
       return new NcdWebSocketHandler();
  }

} public class NcdWebSocketHandler extends TextWebSocketHandler { }

2525 次点击
所在节点    程序员
18 条回复
MENGKE
2024-02-23 09:54:31 +08:00
看下电脑和路由器的防火墙。
vagusss
2024-02-23 10:02:42 +08:00
估计是服务端的防火墙问题,直接关闭试试
Lockeysama
2024-02-23 10:06:42 +08:00
确认下开启 Web 服务的地址是 127.0.0.1 还是 0.0.0.0 这种,有些框架如果地址是 127.0.0.1 的,其它 IP 会访问不了
laaaaaa
2024-02-23 10:08:05 +08:00
@MENGKE
@vagusss 电脑的所有防火墙我都关闭了
laaaaaa
2024-02-23 10:08:47 +08:00
@Lockeysama 从启动来看好像是 127.0.0.1 但是我在项目的配置文件 设置 server.address=0.0.0.0 还是不能用内网 ip 访问
Lockeysama
2024-02-23 10:14:27 +08:00
@laaaaaa 这就不太清楚了,实在不行就用其它语言写个最简单的 Demo 试试看,先确定下是系统环境问题还是框架使用的问题
fiveStarLaoliang
2024-02-23 10:28:06 +08:00
用内网的其他机器 telnet 试下端口是否连接
bubble21
2024-02-23 10:33:42 +08:00
能 ping 通对方 ip 吗?看情况不是代码问题
laaaaaa
2024-02-23 10:34:38 +08:00
@fiveStarLaoliang
@bubble21

我这个项目里有一些业务接口, 局域网内的另一个 IP ,通过我的内网 ip 访问我的业务接口 都是正常的,就 websocket 连接不上...
Hf1G1sGBYS8QSLN8
2024-02-23 10:37:18 +08:00
服务器端收到请求了么?连接失败客户端报的什么错误?
linshuizhaoying
2024-02-23 10:39:44 +08:00
关掉翻墙软件
fiveStarLaoliang
2024-02-23 10:49:02 +08:00
你的业务接口的端口和 websocket 不是一个端口吧,ws 会通过 http 建立连接,然后才升级到 websocket ,有可能 http 的端口是通的,websocket 的端口不通
lqw3030
2024-02-23 13:34:06 +08:00
你用 chrome 做的调试吗,chrome 之类浏览器对 websocket 有安全域名限制,127.0.0.1 和 localhost 属安全域名,你试下上哥 tsl 证书,也就是 wss 估计就可以了
Kevinyy
2024-02-23 13:49:14 +08:00
问题应该在前端,确认前端访问的协议。
cyhulk
2024-02-23 14:14:51 +08:00
建议 wiresharp 抓下 tcp 包,你这样,spring 的 websocket 我记得是 sockjs 的吧,你用 wiresharp 抓 tcp 是最优排查方案,看下 http 有没有建立连接,有没有 update
zjbwill
2024-02-23 14:26:17 +08:00
你工具是自己写的还是网上的现成的,网上的话看下是不是 https 开头的,换个 http 开头的
keller
2024-02-23 14:27:19 +08:00
https://www.easyswoole.com/wstool.html 用这个工具测试一下
IvanLi127
2024-02-24 09:07:18 +08:00
直接复用同一个服务起 http ,看看 http 能连通不,能通的话只少能证明你的服务大概有正常监听。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1017738

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX