如何保证 websockets 的可靠消息传递?

Posted

技术标签:

【中文标题】如何保证 websockets 的可靠消息传递?【英文标题】:How to assure reliable message delivery of websockets? 【发布时间】:2015-03-18 11:33:13 【问题描述】:

我正在开发一个简单的服务器,其主要任务是像典型的Push Notification Server 一样向用户推送通知。我使用java websockets 通过 websocket 会话向用户推送通知。在开发相同的产品时,我列出了一些要求,其中可靠的消息传递是要求之一。

我正在向特定用户推送通知,如下所示,

session.getBasicRemote().sendObject(notification);

但上面的方法返回void,这就是为什么我无法断定通知是否传递到另一端。 其中一个选项是,预期用户将向我的服务器发送反馈以获取相同的通知,我会将相同的通知标记为已成功发送。但这可能会导致网络流量增加。

在通过websocket session

发送通知时,是否有任何标准方法可以确保成功传递通知

【问题讨论】:

【参考方案1】:

websockets 规范非常低级,不提供发送消息的确认。您必须自己将其实现为应用程序级协议,或者在 websockets 之上使用现有协议。

Stomp 是一种流行的协议,它为消费的消息定义了一个“ACK”回复:Stomp specification

【讨论】:

虽然没有提供成功返回的确认,但传递失败是否意味着套接字连接的错误首先会使 TCP 客户端连接无效?换句话说,如果没有来自低级 TCP 套接字连接的任何其他错误,是否可以推断消息传递成功?

以上是关于如何保证 websockets 的可靠消息传递?的主要内容,如果未能解决你的问题,请参考以下文章

解决RabbitMQ消息丢失问题和保证消息可靠性

如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题?

#yyds干货盘点#Redis 使用 List 实现消息队列能保证消息可靠性么?

消息队列面试题要点

消息队列面试题要点

[转] RabbitMQ 消息如何保证100%的投递成功