Google App Engine和Socket.IO上的Mobile Chat应用程序

我正在用Node.JS的Socket.IO创build一个聊天应用程序,有几件事我需要澄清。

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

这是我的做法:

1)客户端打开应用程序并订阅/join房间2)客户端向Socket.IO发送消息3)Socket.IO在某种数据库/数据存储中插入消息4)当客户端试图检索消息时从数据库/数据存储中拉出并保存在用户电话上,然后将其从数据库中删除。

这是一个正确的方法吗?

我在网上看,有人build议使用任务/消息队列,如谷歌应用引擎任务队列,但我不知道这是如何工作的。

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

从你的问题看来,你目前没有将消息保存到数据库。 这种方法有一些缺点。 例如,当一些消息被发送时,用户不能在未连接的设备上查看他们的聊天历史。

有两种方法可以让我们以更优雅的方式去做:

  1. 将所有消息保存到数据库。 在websocket连接和重新连接上,获取所有消息比你的最新消息更新(这种方法假定你的聊天没有编辑function,因为编辑不会被这样获取)。 后者可以使用HTTPWebSockets
  2. 如果您不想将消息存储在服务器中,则应在用于发送消息的设备中实现某种持久性caching。 这与您的原始解决scheme非常相似,不同之处在于不是将消息存储在数据库中,而是将其存储在用户的设备上。 这确实需要一些逻辑来检测什么时候收到消息,什么时候收件人重新连接,以便触发发送丢失的消息。

在我看来,第一种方法对于一般用例要好得多,但这取决于你的用例。