如何使用 NodeJS 和 SocketIO 在 React-Native 中处理离线消息

Posted

技术标签:

【中文标题】如何使用 NodeJS 和 SocketIO 在 React-Native 中处理离线消息【英文标题】:How to handle offline messages in React-Native using NodeJS and SocketIO 【发布时间】:2020-07-30 13:18:17 【问题描述】:

我目前正在使用 SocketIO 和 NodeJS 来处理消息。但是问题是当用户离线时,其他用户无法收到消息。

我想出的解决方案是将消息存储在数据库中。

但是在获取消息和推送通知时出现了一个新问题。

如果我在应用程序处于后台/非活动状态时在服务器中获取“n”分钟。服务端会有很多请求,个人认为效率低下。而且它也会耗尽电池。

如何处理从数据库中获取消息或在应用程序中推送通知而不在“n”分钟内发出过多请求并消耗过多电量的正确方法是什么?

【问题讨论】:

【参考方案1】:

您需要在 App 中保存上次同步时间。每当应用程序来自后台/非活动状态时。这个时候你需要调用一个 API。此 API 将为您提供上次同步时间之后的所有消息和推送通知。这样,通过一次 API 调用,您将能够获取所有消息和推送通知。我曾使用这种方法在我的一个应用中同步我的数据。

【讨论】:

我迷失了“此 API 将为您提供所有消息和上次同步时间之后的推送通知”如何处理此 API?喜欢它会在后台持续运行吗?如果是这样的话,我们就会遇到“多次请求服务器,手机电量耗尽”的问题。 当您的应用从后台/非活动状态进入活动状态时,您需要调用此 API。它不会在后台持续调用。此外,即使在后台也将始终收到推送通知。 @Rajan 嗨,Rajan。希望你很好,我知道自从你回答这个问题以来一直很糟糕,但我真的需要关于我的问题的帮助。 ***.com/questions/65325432/…【参考方案2】:

我的建议是在 API 中实现一个后台作业系统,检查何时有新的通知要启动,或者通知已经准备好等待在队列中启动。可以搜索 Bull、Bee-Queue 等队列管理器。

要在关闭/非活动应用中启动推送通知,您可以使用 OneSignal 或 Firebase 等服务。

我在几周前实现了这一点,并以这种方式做到了。 API = Node.js,公牛队列 App = React Native,OneSignal

【讨论】:

【参考方案3】:

如果有人偶然发现了这个问题,请回到这个问题。

无论您使用的是 NodeJS/MongoDB 等,处理离线消息的最佳方法是将其存储在服务器的数据库中。然后调用一个 API 来获取与用户 ID 相同的消息,每当移动应用程序进入前台时。

如果您的问题是您需要通知并且您正在使用

react-native-push-notifications / react-native-push-notification-ios

然后您应该使用 数据通知 在服务器端的通知参数中包含消息(假设您使用的是 Firebase 云消息传递)。通过这种方式,您可以直接将消息保存在手机的数据库中。

【讨论】:

以上是关于如何使用 NodeJS 和 SocketIO 在 React-Native 中处理离线消息的主要内容,如果未能解决你的问题,请参考以下文章

NodeJS + SocketIO 推送到移动应用

如何在nodejs,socketio中检查在线用户?

如何在nodejs服务器上使用android socketio模块在两个人之间进行聊天?

ESP32-CAM 使用 socketIO 将视频输出流式传输到 nodejs 服务器的最快方法

使用 Nodejs + SocketIO 时丢弃传输错误

nodejs redis socketIo