服务器消息推送方式?

想请问一下,当数据库中某个字段变化的时候,需要将这个变化推送给app进行显示的这样一个业务需求有合适的解决方案吗?
我查询了一些资料,发现有下面的一个解决方式:
1.长轮询的方法:但是我觉这个需要耗费性能
2.websocket方式:这个实现起来比较复杂,而且数据库字段变化并不频繁,实时性的要求不高
3.采用rabbitmq的方式:我感觉这个靠谱一点,因为有些物联网的监控软件会去监控设备的状态变化,但是不知道现在有没有app是采用这种方案的。

阅读 3.2k
3 个回答
✓ 已被采纳

对于数据库字段变化推送给app进行显示的需求,有几种常见的解决方案可以考虑:

  1. 使用推送通知:当数据库字段发生变化时,可以通过推送通知的方式将变化的信息推送给app进行显示。这种方式可以使用第三方推送服务(如Firebase Cloud Messaging、APNs等)来实现,相对简单且实时性较高。
  2. 轮询方式:可以在app端定时轮询数据库,检查字段是否有变化。这种方式相对简单,但会增加服务器的负载和网络流量,适用于字段变化较为频繁的情况。
  3. WebSocket方式:可以在app与服务器之间建立WebSocket连接,当数据库字段发生变化时,服务器主动推送变化的信息给app。这种方式相对复杂,但实时性较高,适用于需要实时展示变化的场景。
  4. 使用消息队列:可以使用消息队列(如RabbitMQ、Kafka等)来传递数据库字段变化的消息,app订阅该消息队列,接收并展示变化的信息。这种方式可以实现解耦,适用于需要处理大量消息的场景。

根据你的描述,如果数据库字段变化并不频繁且实时性要求不高,可以考虑使用推送通知的方式。如果实时性要求较高,可以考虑WebSocket方式。如果需要处理大量消息且具有一定的灵活性和扩展性,可以考虑使用消息队列。具体选择哪种方式,还需要根据具体业务需求和技术实现的可行性进行综合评估。

比较简单的方式是长轮训模式;

比如说查询变化的接口超时时间为 30s, 前端发起请求后,后端查询变化,如果没有变化,后端不要直接将结果返回给前端,而是等待 若干秒 之后循环的去查询数据库变化,在临近 30s 超时时,如果还没有变化才返回前端没有变化这个结果;之后前端继续轮训,中间后端如果有变化的话可以直接返回变化结果;

这种方式相对比较简单,也无需频繁发起轮训请求。

可以使用 EventSource,具体可以看这个MDN文档的介绍使用MDN文档链接

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏