通过Spring WebSocket发送同步消息是否可行?

6
我有一个使用Spring框架的应用程序,通过Spring WebSocket异步地向另一台服务器发送消息。但是在某些特定情况下,我需要同步发送消息,并且需要在服务器返回响应后继续处理过程。
我不想为此过程单独进行HTTP调用,因为已经有一个打开的TCP连接,我希望利用它。
例如,在Tyrus WebSocket实现中,可以通过以下方式同步或异步发送消息:
session.getBasicRemote().sendText(message);
session.getAsyncRemote().sendText(message);

相关的Tyrus文档 链接

顺便说一下,我不使用像Spring WebSocket那样的子协议STOMP。

1个回答

0

您可以为需要回答的消息添加自定义模式。

假设您想将表单从服务器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字符串和命令/消息分隔符以提高效率。 - Hugo Sartori

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接