gde*_*enn 22 api notifications backend push-notification websocket
我正在开发一个 Xamarin 应用程序,该应用程序使用用 Python 烧瓶编写的 REST API。
Xamarin 应用程序提供虚拟购物清单,用户可以在其中协作购买共享清单上的商品。
为了改善用户体验,我希望能够主动通知用户列表中已完成的项目。
通知由 API 存储在关系数据库中,并有一个标志,指示用户是否已收到通知。
API 有一个端点GET /users/:user_id/notifications/
,用于查询数据库中的通知并返回带有这些通知的 JSON 响应。
同步轮询会产生大量的 http 请求
API 服务保持无状态,使用负载均衡器更容易进行水平扩展
API 有一个端点POST /users/:user_id/notifications/register
,它在客户端和 API 之间创建 websocket 连接。
连接存储在一个全局数组中,其中每个条目将一个客户端 ID 映射到一个 websocket 连接。
创建新通知时,端点通过将通知的所有者 ID 与字典条目进行比较,在连接字典中进行查找。通知通过 websocket 发送给适当的用户。
通知像第一种方法一样存储在数据库中。
当用户调用端点时,将首先建立一个新的 websocket 连接,成功后 API 将所有看不见的通知从数据库发送给用户。
API 使用 RabbitMQ 服务向客户端发送通知。每个客户端都使用订阅自己的通知队列来防止消息广播。
当用户离线时需要重新发送通知到交易所
队列数量急剧增加
RabbitMQ 服务的额外费用
多个用户同时在线时,RabbitMQ 服务的临时负载较高
听听别人的意见会很有趣。
我相信从后端服务向客户端主动分发通知是一个非常常见的用例。
最好的,D
归档时间: |
|
查看次数: |
7750 次 |
最近记录: |