gpt4 book ai didi

java - Web Socket - Spring : Confirm of message received

转载 作者:行者123 更新时间:2023-11-30 03:29:02 25 4
gpt4 key购买 nike

我使用 Spring 通过 WebSocket 从 Tomcat 服务器向 SockJSClient 发送消息,方法如下:

WebSocketSession.sendMessage(WebSocketMessage<?> message)

并且我想知道何时收到消息(最终带有补充信息,例如客户端上的逻辑是否成功处理),然后转到下一条消息。

这是解释用例的 Activity 图。 enter image description here

我如何收到客户的接收或结果确认?

最佳答案

正如 Erwin 指出的,您可以采用一些提供此类功能的更高协议(protocol),例如 STOMP。但是,如果您害怕仅针对该功能采用它,您可以自己实现该功能。

  • 第一件事是给每条消息id来识别每条消息,type来识别每条消息的目的,data来传输消息的内容和 reply ,这是一个标志,用于查看是否需要 ACK 并使用 JSON 等格式将包含这些数据的对象序列化到 WebSocket 消息中或从 WebSocket 消息中反序列化。
  • 发送消息时,它会通过为该消息发出新的 id 来创建一个对象,并将 type 设置为 message data 到给定消息,如果需要 ACK,则replytrue,如果不需要,则为 false。它将其序列化为 JSON 并将其作为 WebSocket 消息发送。 -https://github.com/cettia/cettia-protocol/blob/1.0.0-Alpha1/lib/server.js#L88-L110
  • 当接收到消息时,它会将 JSON 反序列化为上述对象。如果replytrue,则发送一条typereply设置data的特殊消息> 到该消息的 id。然后,对方可以确认对方已收到一条id为id的消息。 -https://github.com/cettia/cettia-protocol/blob/1.0.0-Alpha1/lib/server.js#L46-L76

以上链接指向 Cettia 中的类似实现这是我写的一个实时Web应用程序框架。尽管该实现有点复杂,因为它旨在允许用户处理带有结果的回调,但您可能会明白基本的想法。

该链接实现的 API 如下所示。

需要事件处理结果的服务器或客户端。

// Using Java server with lambda
socket.send("foo", "bar", result -> /* resolved */, reason -> /* rejected */);

负责提交结果的相应客户端或服务器。

// Using JavaScript client with arrow functions
socket.on("foo", (data, reply) => {
// data is 'bar'
// 'reply.resolve(result)' if it successes
// 'reply.reject(reason)' if it fails
});

关于java - Web Socket - Spring : Confirm of message received,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29490945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com