Google App Engine 和 Socket.IO 上的移动聊天应用程序

问题描述 投票:0回答:1

我正在使用 Node.js 的 Socket.IO 创建一个聊天应用程序,有一些事情我需要澄清。

我正在我的应用程序中实现离线消息传递,这意味着当用户打开应用程序时,他将收到他在线时错过的所有消息。

这是我的方法:

  1. 客户端打开应用程序并订阅或加入房间。
  2. 客户端向Socket.IO发送消息。
  3. Socket.IO 将消息插入某种数据库/数据存储中。
  4. 当客户端尝试检索消息时,它会从数据库/数据存储中提取并保存在用户的手机上,然后从数据库中删除。

这是正确的做法吗?

我在网上查找,有些人建议使用任务/消息队列,例如 Google App Engines 任务队列,但我不确定这是如何工作的。

node.js socket.io chat
1个回答
1
投票

你的方法听起来不错,但我不会从数据库中删除消息,至少不会在客户端收到消息后立即删除。

从您的问题看来,您当前没有将消息保存到数据库中。 这种方法有一些缺点;例如,发送某些消息时,用户无法在未连接的设备上查看聊天记录。

我可以想到两种方法以更优雅的方式做到这一点:

  1. 将所有消息保存到数据库。在 websocket 连接和重新连接上,获取比您的最新消息更新的所有消息(此方法假设您的聊天中没有编辑功能,因为不会以这种方式获取编辑)。后者可以使用
    HTTP
    WebSockets
    来实现。
  2. 如果您不想将消息存储在服务器中,那么您应该在用于发送消息的设备中实现某种持久缓存。这与您原来的解决方案非常相似,只不过您不是将消息存储在数据库中,而是将它们存储在用户的设备上。这确实需要一些逻辑来检测何时收到消息以及接收者何时重新连接,以便触发发送丢失的消息。

我认为第一种方法更适合一般用例,但这取决于您的用例。

© www.soinside.com 2019 - 2024. All rights reserved.