【问题标题】:Is it possible to send synchronous messages via Spring WebSocket?是否可以通过 Spring WebSocket 发送同步消息?
【发布时间】:2015-12-10 05:04:15
【问题描述】:

我有一个 Spring 应用程序,它通过 Spring WebSocket 异步向另一台服务器发送消息。但是对于我需要同步发送消息的特定情况,我应该使用来自服务器的传入响应继续该过程。

我不想只为此进程进行 HTTP 调用,因为已经有一个打开的 TCP 连接,我想使用它。

例如在 Tyrus WebSocket 实现中,可以通过同步或异步发送消息

session.getBasicRemote().sendText(message);
session.getAsyncRemote().sendText(message);

Tyrus 相关文档link.

顺便说一句,我不使用 sub-protocol 像带有 Spring WebSocket 的 STOMP。

【问题讨论】:

    标签: java spring websocket spring-websocket tyrus


    【解决方案1】:

    您可以将自定义模式添加到需要回复的消息中。

    假设您要将表单服务器 A 发送到服务器 B:

    sendToB("REPLY ME!");
    

    在您实际发送消息之前,服务器 A 在其中放入一个自定义短语,例如:

    sendToB("REQUEST:1234" + "#$#" + "REPLY-ME!");
    

    当服务器B收到消息时:

    String[] parts = message.split("#$#");
    if (parts.length > 0) {
        String[] keyValue = parts[0].split(":");
        sendToA("RESPONSE:" + keyValue[1] + "#$#" + "CALM DOWN!");
    }
    

    最后,服务器A收到消息:

    "RESPONSE:1234#$#CALM DOWN!"
    

    那么同步消息就完成了。

    【讨论】:

    • 这是一种子协议,但足够简单。当然,这是一个伪 java 代码,实际实现会多一些代码,您可以优化 REQUEST/RESPONSE 字符串和命令/消息分隔符以提高效率。
    猜你喜欢
    • 1970-01-01
    • 2015-11-17
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2020-10-26
    相关资源
    最近更新 更多