首页 > 解决方案 > 具有从服务器到客户端的主动推送通知的 REST API

问题描述

问题描述

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

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

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

可能的解决方案:

来自客户端的同步 API 轮询

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

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

优点

问题

API 上的 Websocket 端点

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

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

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

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

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

优点

问题

兔MQ

API 使用 RabbitMQ 服务向客户端发送通知。每个客户端都使用订阅自己的通知队列来防止消息的广播。

优点

问题

最后的话

听听别人的意见会很有趣。

我相信从后端服务到客户端的主动分发通知是非常常见的用例。

最好的,D

标签: apiwebsocketpush-notificationnotificationsbackend

解决方案


我会使用 RabbitMQ 并将事件作为推送通知转发。这将在用户未主动连接到网站时起作用,并增强每个用户体验的参与度,当收到通知时将返回网站以获取更多信息,请参阅如何使用 Flask 后端设置基本 Web 推送通知功能如何发送推送在 ASP.NET Core 中向浏览器发送通知或使用 Spring Boot、Angular 和 Firebase 云消息发送通知,这样 RabbitMQ 不会等到用户重新联机。如果用户在线,您可以通过 WebSockets 和NGINX等负载均衡器将通知直接转发到 Xamarin 应用程序可以以优化的方式处理许多 WebSocket。来自客户端的同步 API 轮询是不太受欢迎的方式,因为它在没有任何更改的情况下使 Web 服务器超载请求。


推荐阅读