V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Newyorkcity
V2EX  ›  问与答

websocket 和在 springboot 中使用它的一些问题

  •  
  •   Newyorkcity · 2021-04-24 10:45:46 +08:00 · 1231 次点击
    这是一个创建于 1294 天前的主题,其中的信息可能已经有所发展或是发生改变。

    WebSocket 的 Configuration:

    @Configuration
    @EnableWebSocket
    public class WebSocketConfig implements WebSocketConfigurer {
        @Override
        public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
            registry.addHandler(new WebSocketController(), "/rc");
        }
    }
    

    处理 WebSocket 的 Handler:

    public class WebSocketController implements WebSocketHandler {
    
        @Override
        public void afterConnectionEstablished(WebSocketSession session) throws Exception {
            System.out.println("afterConnectionEstablished");
        }
    
        @Override
        public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {
            System.out.println("handleMessage");
        }
    
        @Override
        public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
            System.out.println("handleTransportError");
        }
    
        @Override
        public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {
            System.out.println("afterConnectionClosed");
        }
    
        @Override
        public boolean supportsPartialMessages() {
            System.out.println("supportsPartialMessages");
            return false;
        }
    }
    

    程序运行后,

    在浏览器地址栏输入 http://localhost:8080/rc,得到的结果是 Can "Upgrade" only to "WebSocket".,Java 程序的控制台无输出。

    在浏览器地址栏输入 ws://localhost:8080/rc,结果如下:

    无法访问此网站网址为 ws://localhost:8080/rc 的网页可能暂时无法连接,或者它已永久性地移动到了新网址。 ERR_DISALLOWED_URL_SCHEME

    Java 程序的控制台仍然无输出。

    为什么?

    我一开始以为是浏览器地址栏直接输入 ws 来访问这种用法可能不被支持,所以我搜了下 websocket 测试工具。

    但即便是这些测试工具去访问 ws://localhost:8080/rc 也还是不行,连接失败。Java 控制台仍然无输出。

    请问是我的 java 程序还缺了什么吗?还是我测试 websocket 连接的方式不对?

    谢谢

    3 条回复    2021-04-24 14:21:24 +08:00
    pjntt
        1
    pjntt  
       2021-04-24 12:56:53 +08:00
    写个 HTML 页面,用 JS 脚本绑定 websocket 。把 HTML 文件直接拖到浏览器里,就可以测试 websocket 。
    HarryQu
        2
    HarryQu  
       2021-04-24 13:49:30 +08:00   ❤️ 1
    之前我 websocket 接入过程中遇到的坑蛮多的。有个 Demo 你看下 :

    https://zq99299.github.io/essay-note/chapter/websocket/spring/websocket.html

    跨域问题,我是在小程序访问服务器的过程中才遇到。
    yalin
        3
    yalin  
       2021-04-24 14:21:24 +08:00
    Spring 给出的 websocket 方案是 STOMP 协议,STOMP 协议不是标准的 websocket,用 websocket 工具无法调试
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2856 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 02:26 · PVG 10:26 · LAX 18:26 · JFK 21:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.