java - Web Socket - Spring : Confirm of message received

标签 java spring websocket

我使用 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/

相关文章:

hibernate - 如何将spring的服务bean注入(inject)到JPA实体中?

java - 无法在intellij中将Spring mvc部署到tomcat

WebSocket 连接和 Tritium

java - 即使我将 JVM 选择添加到 cassandra-env.sh,Cassandra JMX 也不会监听 eth0

java - 我无法让此类通过按钮打开另一个类/xml

java - 为什么@Autowired注释将同一类的每个bean关联到context.xml中?

javascript - 将 node-v0.10.4 用于 websocket 代理时出现错误 'invalid data'

ssl - 如何在 Linux 上建立安全的 websocket (wss ://) to insecure websocket (ws://) ( stunnel ?)

java - 自定义扩展 `EventObject` 和 `EventListener` 有什么好处

java - 在 Java 中使用多级 HashMap 的最佳实践