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

2021-04-24 10:45:46 +08:00
 Newyorkcity

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 连接的方式不对?

谢谢

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

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

跨域问题,我是在小程序访问服务器的过程中才遇到。
yalin
2021-04-24 14:21:24 +08:00
Spring 给出的 websocket 方案是 STOMP 协议,STOMP 协议不是标准的 websocket,用 websocket 工具无法调试

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

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

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

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

© 2021 V2EX