V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
laaaaaa
V2EX  ›  程序员

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

  •  
  •   laaaaaa · 2024-02-23 09:41:09 +08:00 · 2239 次点击
    这是一个创建于 369 天前的主题,其中的信息可能已经有所发展或是发生改变。

    环境

    服务端: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 { }

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

    我这个项目里有一些业务接口, 局域网内的另一个 IP ,通过我的内网 ip 访问我的业务接口 都是正常的,就 websocket 连接不上...
    Hf1G1sGBYS8QSLN8
        10
    Hf1G1sGBYS8QSLN8  
       2024-02-23 10:37:18 +08:00
    服务器端收到请求了么?连接失败客户端报的什么错误?
    linshuizhaoying
        11
    linshuizhaoying  
       2024-02-23 10:39:44 +08:00
    关掉翻墙软件
    fiveStarLaoliang
        12
    fiveStarLaoliang  
       2024-02-23 10:49:02 +08:00
    你的业务接口的端口和 websocket 不是一个端口吧,ws 会通过 http 建立连接,然后才升级到 websocket ,有可能 http 的端口是通的,websocket 的端口不通
    lqw3030
        13
    lqw3030  
       2024-02-23 13:34:06 +08:00   ❤️ 1
    你用 chrome 做的调试吗,chrome 之类浏览器对 websocket 有安全域名限制,127.0.0.1 和 localhost 属安全域名,你试下上哥 tsl 证书,也就是 wss 估计就可以了
    Kevinyy
        14
    Kevinyy  
       2024-02-23 13:49:14 +08:00 via iPhone
    问题应该在前端,确认前端访问的协议。
    cyhulk
        15
    cyhulk  
       2024-02-23 14:14:51 +08:00
    建议 wiresharp 抓下 tcp 包,你这样,spring 的 websocket 我记得是 sockjs 的吧,你用 wiresharp 抓 tcp 是最优排查方案,看下 http 有没有建立连接,有没有 update
    zjbwill
        16
    zjbwill  
       2024-02-23 14:26:17 +08:00
    你工具是自己写的还是网上的现成的,网上的话看下是不是 https 开头的,换个 http 开头的
    keller
        17
    keller  
       2024-02-23 14:27:19 +08:00
    https://www.easyswoole.com/wstool.html 用这个工具测试一下
    IvanLi127
        18
    IvanLi127  
       2024-02-24 09:07:18 +08:00
    直接复用同一个服务起 http ,看看 http 能连通不,能通的话只少能证明你的服务大概有正常监听。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2484 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 15:48 · PVG 23:48 · LAX 07:48 · JFK 10:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.