Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以通过Spring WebSocket发送同步消息?_Java_Spring_Websocket_Spring Websocket_Tyrus - Fatal编程技术网

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

Java 是否可以通过Spring WebSocket发送同步消息?,java,spring,websocket,spring-websocket,tyrus,Java,Spring,Websocket,Spring Websocket,Tyrus,我有一个Spring应用程序,它通过异步方式向另一台服务器发送消息。但是对于一个特定的情况,我需要同步发送一条消息,我应该使用来自服务器的传入响应继续这个过程 我不想只为此进程进行HTTP调用,因为已经有一个打开的TCP连接,我想使用它 例如,在Tyrus WebSocket实现中,可以通过以下方式同步或异步发送消息: session.getBasicRemote().sendText(message); session.getAsyncRemote().sendText(message);

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

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

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

session.getBasicRemote().sendText(message);
session.getAsyncRemote().sendText(message);
相关Tyrus文件


顺便说一句,我不使用像STOMP with 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!");
}
"RESPONSE:1234#$#CALM DOWN!"
最后,服务器A接收消息:

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

然后同步消息完成。

这是一种子协议,但很简单。当然,这是一个伪java代码,实际的实现将有更多的代码行,您可以优化请求/响应字符串和命令/消息分隔符以提高效率。