我正在开发一个 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 使用 …