6

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

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

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

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

相关 Tyrus 文档链接

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

4

1 回答 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!"

然后同步消息就完成了。

于 2019-04-25T22:24:17.267 回答