Ios Google App Engine和Socket.IO上的移动聊天应用程序
我正在用Node.JS的Socket.IO创建一个聊天应用程序,有几件事我需要澄清 我正在我的应用程序中实现离线消息传递,这意味着当用户打开应用程序时,他将收到在线时错过的所有消息 这是我的方法: 1) 客户端打开应用程序并订阅/加入房间 2) 客户端向Socket.IO发送消息 3) Socket.IO将消息插入某种数据库/数据存储中 4) 当客户端尝试检索消息时,它会从数据库/数据存储中提取并保存在用户手机上,然后从数据库中删除 这是正确的方法吗Ios Google App Engine和Socket.IO上的移动聊天应用程序,ios,node.js,sockets,socket.io,chat,Ios,Node.js,Sockets,Socket.io,Chat,我正在用Node.JS的Socket.IO创建一个聊天应用程序,有几件事我需要澄清 我正在我的应用程序中实现离线消息传递,这意味着当用户打开应用程序时,他将收到在线时错过的所有消息 这是我的方法: 1) 客户端打开应用程序并订阅/加入房间 2) 客户端向Socket.IO发送消息 3) Socket.IO将消息插入某种数据库/数据存储中 4) 当客户端尝试检索消息时,它会从数据库/数据存储中提取并保存在用户手机上,然后从数据库中删除 这是正确的方法吗 我在网上查看,一些人建议使用任务/消息队列,
我在网上查看,一些人建议使用任务/消息队列,如Google App Engines任务队列,但我不确定这是如何工作的。你的方法听起来不错,但我不会从数据库中删除消息,至少不会在客户端收到消息后立即删除 从您的问题来看,您当前似乎没有将消息保存到数据库中。 这种方法有一些缺点;例如,当发送某些消息时,用户无法在未连接的设备上查看其聊天历史记录 我可以想出两种方法来更优雅地完成这项工作:
HTTP
或WebSockets
实现在我看来,第一种方法对于一般用例更好,但这取决于您的用例。为什么从我的数据库中删除消息不好@Nadavvadan,因为这样您就不会保存用户的聊天历史记录。这取决于您的用例,但我认为您可能希望将聊天记录保存在数据库中,以便在用户删除数据后,其他设备/同一设备可以访问信息。同样,这并不适用于所有的应用程序,所以我把它看作是最常见的用例。在这种情况下,消息队列可以取代数据库吗。例如,我可以使用RabbitMQ而不是将消息存储在数据库中吗?我明白你所说的聊天历史的意思,这对于应用程序的上下文来说非常具体。感谢您的回复。使用RabbitMQ/ZeroMQ/Redis/其他消息传递队列,即时消息在正确的轨道上是可能的。但是你的申请有必要吗?我不这么认为。尝试一下可能会很有趣,但除非你期待大量的流量,
websockets
应该足够了,而且更易于配置,而且还可以在web浏览器中得到支持(因此,理论上,你也可以为你的应用构建一个web应用程序)。我可能会选择WebSocket和DB。