小编gde*_*enn的帖子

具有从服务器到客户端的主动推送通知的 REST API

问题描述

我正在开发一个 Xamarin 应用程序,该应用程序使用用 Python 烧瓶编写的 REST API。

Xamarin 应用程序提供虚拟购物清单,用户可以在其中协作购买共享清单上的商品。

为了改善用户体验,我希望能够主动通知用户列表中已完成的项目。

可能的解决方案:

来自客户端的同步 API 轮询

通知由 API 存储在关系数据库中,并有一个标志,指示用户是否已收到通知。

API 有一个端点GET /users/:user_id/notifications/,用于查询数据库中的通知并返回带有这些通知的 JSON 响应。

好处

  • 实施起来相当简单

问题

  • 同步轮询会产生大量的 http 请求

  • API 服务保持无状态,使用负载均衡器更容易进行水平扩展

API 上的 Websocket 端点

API 有一个端点POST /users/:user_id/notifications/register,它在客户端和 API 之间创建 websocket 连接。

连接存储在一个全局数组中,其中每个条目将一个客户端 ID 映射到一个 websocket 连接。

创建新通知时,端点通过将通知的所有者 ID 与字典条目进行比较,在连接字典中进行查找。通知通过 websocket 发送给适当的用户。

通知像第一种方法一样存储在数据库中。

当用户调用端点时,将首先建立一个新的 websocket 连接,成功后 API 将所有看不见的通知从数据库发送给用户。

好处

  • API 可以异步推送通知给客户端

问题

  • 当用户终止 websocket 连接时,他的字典条目将保留
  • 为每个用户保留一个 websocket 连接会永久增加 API 的额外开销
  • API 的横向扩展更困难,因为服务不再是无状态的(Websocket 连接信息保存在

兔MQ

API 使用 …

api notifications backend push-notification websocket

22
推荐指数
1
解决办法
7750
查看次数