【发布时间】:2016-06-14 20:16:41
【问题描述】:
我需要编写一个可以在客户端发送推送通知的应用程序。但有时客户端会断开连接,所以我想存储通知并在客户端重新连接时将它们发送给客户端。
有没有办法做到这一点? 我需要一种在发送之前知道客户端是否存在的方法,或者一种知道是否收到通知的方法。 而且我的通知是特定于客户的。
我不能炫耀很多代码,但我想使用这样的东西:
@Autowired
private SimpMessagingTemplate messagingTemplate;
public void sendPush(Long clientId) {
messagingTemplate.convertAndSendToUser(clientId, "/queue/reply", myMessage);
// -> how do I know if message is received ?
}
我使用 spring-websocket 和 stomp-endpoint。
谢谢!
【问题讨论】:
-
您的客户是否有在他们的系统上运行的客户端程序?你能控制那个代码吗?如果是这样,您的阻力最小的路径将是实现在客户端连接时从服务器拉入(或请求)消息的代码 - 这应该已经存在。那么服务器就会知道消息被推送了。
-
如果服务器不知道客户端何时收到推送消息,如何知道是否必须向客户端发送消息?
-
客户端告诉服务器“嘿!我在这里!”当它连接时。服务器然后说“好的;这里拿这些消息!”客户回复“好的,我知道了;谢谢!”服务器正在等待客户端告诉它它收到了消息——在此之前服务器不知道也不可能知道客户端是否收到了消息。如果我给你寄了一封信,而你没有回信,我怎么知道你收到了我寄给你的信?据我了解,这个问题与 TCP 通过 UDP 解决的问题相同。
-
websockets 是全双工的,所以服务器必须知道客户端是否连接。如果客户端已连接,我们可以假设他收到了消息。服务器必须能够知道,当他必须发送消息时,他必须存储消息以供以后使用(客户端断开连接),还是发送(客户端连接)。我尝试实现的正是这个功能。
-
我现在明白了。它不知道客户端何时断开连接正确?
标签: java stomp spring-websocket spring-messaging