Java 确保收到消息

Java 确保收到消息,java,stomp,spring-websocket,spring-messaging,Java,Stomp,Spring Websocket,Spring Messaging,我需要写一个应用程序,可以在客户端发送推送通知。但有时客户端是断开连接的,所以我希望存储通知,并在客户端重新连接时将其发送给客户端 有没有办法做到这一点? 我需要一种方法来知道客户端是否在发送之前在场,或者一种方法来知道通知是否收到。 我的通知是特定于客户端的 我不能炫耀很多代码,但我想使用以下内容: @Autowired private SimpMessagingTemplate messagingTemplate; public void sendPush(Long clientId) {

我需要写一个应用程序,可以在客户端发送推送通知。但有时客户端是断开连接的,所以我希望存储通知,并在客户端重新连接时将其发送给客户端

有没有办法做到这一点? 我需要一种方法来知道客户端是否在发送之前在场,或者一种方法来知道通知是否收到。 我的通知是特定于客户端的

我不能炫耀很多代码,但我想使用以下内容:

@Autowired
private SimpMessagingTemplate messagingTemplate;

public void sendPush(Long clientId) {

    messagingTemplate.convertAndSendToUser(clientId, "/queue/reply", myMessage);
    // -> how do I know if message is received ?
}
我使用SpringWebSocket和stomp端点


谢谢大家!

您可能希望从用户那里收到一条“确认”消息。
您可以将所有消息保存在一个数据结构中,并仅在收到ack时将其从数据结构中删除。

也许您可以期望从用户处收到“ack”消息。
您可以将所有消息保存在一个数据结构中,并仅在收到ack后将其删除。

是的,这确实是一个解决方案。但是我更喜欢在服务器端保留逻辑,在客户端做最少的事情。是的,这确实是一个解决方案。但是我更喜欢在服务器端保留逻辑,在客户端执行最少的操作。您的客户端是否有在其系统上运行的客户端程序?你能控制那个代码吗?如果是这样,那么阻力最小的方法就是实现在客户端连接时从服务器中提取(或请求)消息的代码,这应该已经存在了。然后服务器将知道消息被推送。如果服务器不知道客户端何时收到推送消息,它如何知道消息是否必须发送给客户端?客户端在连接时告诉服务器“嘿!我在这里!”。然后服务器会说“好的,给你这些消息!”客户端会回答“好的,我收到了,谢谢!”服务器会等待客户端告诉它它收到了消息——直到那时服务器才知道,也不可能知道客户端是否收到了这些消息。如果我给你寄了一封信,而你却没有回信,我怎么知道你收到了我寄给你的信?据我所知,这个问题与TCP通过UDP解决的问题相同。WebSocket是全双工的,因此服务器必须知道客户端是否连接。如果客户端已连接,我们可以假定他已收到消息。服务器必须能够知道,当他必须发送消息时,他是否必须存储消息以备将来使用(客户端断开连接),或者发送消息(客户端已连接)。这就是我试图实现的功能。我现在明白了。虽然正确,但它不知道客户端何时断开连接?您的客户端是否有在其系统上运行的客户端程序?你能控制那个代码吗?如果是这样,那么阻力最小的方法就是实现在客户端连接时从服务器中提取(或请求)消息的代码,这应该已经存在了。然后服务器将知道消息被推送。如果服务器不知道客户端何时收到推送消息,它如何知道消息是否必须发送给客户端?客户端在连接时告诉服务器“嘿!我在这里!”。然后服务器会说“好的,给你这些消息!”客户端会回答“好的,我收到了,谢谢!”服务器会等待客户端告诉它它收到了消息——直到那时服务器才知道,也不可能知道客户端是否收到了这些消息。如果我给你寄了一封信,而你却没有回信,我怎么知道你收到了我寄给你的信?据我所知,这个问题与TCP通过UDP解决的问题相同。WebSocket是全双工的,因此服务器必须知道客户端是否连接。如果客户端已连接,我们可以假定他已收到消息。服务器必须能够知道,当他必须发送消息时,他是否必须存储消息以备将来使用(客户端断开连接),或者发送消息(客户端已连接)。这就是我试图实现的功能。我现在明白了。它不知道客户端何时断开连接,但正确吗?