Web Socket - Spring:确认收到的消息

时间:2015-04-07 11:53:09

标签: java spring websocket

我通过WebSocket向Tomcat Server发送一条消息,使用Spring方法将消息传递给SockJSClient:

WebSocketSession.sendMessage(WebSocketMessage<?> message)

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

这是一个解释用例的活动图。 enter image description here

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

1 个答案:

答案 0 :(得分:2)

正如Erwin所指出的,你可以采用一些更高的协议来提供像STOMP这样的功能。但是,如果您不敢仅为该功能采用它,则可以自己实现该功能。

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

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

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

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

id

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

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