2016-06-14 138 views
0

我需要編寫一個可以在客戶端發送推送通知的應用程序。但是有時客戶端會斷開連接,所以我想要存儲通知並在重新連接時將它們發送給客戶端。確保收到消息

有沒有辦法做到這一點? 我需要一種方法在發送之前知道客戶端是否存在,或者知道是否收到通知的方式。 而我的通知是客戶特定的。

我不能炫耀大量的代碼,但我想用這樣的:

@Autowired 
private SimpMessagingTemplate messagingTemplate; 

public void sendPush(Long clientId) { 

    messagingTemplate.convertAndSendToUser(clientId, "/queue/reply", myMessage); 
    // -> how do I know if message is received ? 
} 

我用彈簧的WebSocket和跺腳端點。

謝謝!

+1

您的客戶是否有他們的系統上運行的客戶端程序?你有沒有對該代碼的控制?如果是這樣,你的阻力最小的路徑是實現代碼,當客戶端連接時從服務器拉入(或請求)消息 - 應該已經在那裏。那麼服務器就會知道消息被推送了。 –

+0

如果服務器不知道客戶端何時收到推送消息,它是如何知道消息是否必須發送給客戶端的? –

+1

客戶告訴服務器「嗨!我在這裏!」當它連接。服務器然後說:「好的,在這裏拿這些消息!」客戶回覆「好吧,我得到了他們,謝謝你!」服務器正在等待客戶端告訴它它已收到消息,直到服務器不知道客戶端是否收到消息。如果我寄給你一封信,而你不寄一封信,我怎麼知道你收到了我寄給你的信?據我瞭解,這個問題與TCP通過UDP解決的問題相同。 –

回答

0

也許你可以期望得到來自用戶的「ack」消息。 只有在得到答案後,才能將所有消息保留在數據結構中並將其從消息中刪除。

+0

是的,的確,這是一個解決方案,但我會優先保留服務器端的邏輯並在客戶端執行最小化。 –