我有一个Spring应用程序,它通过Spring WebSocket异步地向另一个服务器发送消息。但是对于需要同步发送消息的特定情况,我应该继续处理来自服务器的传入响应。
我不想只对这个进程进行HTTP调用,因为已经有一个打开的TCP连接,我想使用它。
例如,在Tyrus WebSocket实现中,可以通过
同步或异步发送消息session.getBasicRemote().sendText(message);
session.getAsyncRemote().sendText(message);
相关Tyrus文档链接。
顺便说一句,我不使用像STOMP这样的sub-protocol
与Spring WebSocket。
您可以为需要回复的消息添加自定义模式。
假设您想要发送表单服务器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!"
同步消息完成