Google App Engine和Socket.IO上的Mobile Chat应用程序
我正在用Node.JS的Socket.IO创build一个聊天应用程序,有几件事我需要澄清。
我在我的应用程序中实现了离线消息,这意味着当用户打开应用程序时,他将收到他在线时错过的所有消息。
这是我的做法:
1)客户端打开应用程序并订阅/join房间2)客户端向Socket.IO发送消息3)Socket.IO在某种数据库/数据存储中插入消息4)当客户端试图检索消息时从数据库/数据存储中拉出并保存在用户电话上,然后将其从数据库中删除。
这是一个正确的方法吗?
我在网上看,有人build议使用任务/消息队列,如谷歌应用引擎任务队列,但我不知道这是如何工作的。
你的方法听起来不错,但我不会从数据库中删除消息,至less在客户端收到消息后不会立即删除。
从你的问题看来,你目前没有将消息保存到数据库。 这种方法有一些缺点。 例如,当一些消息被发送时,用户不能在未连接的设备上查看他们的聊天历史。
有两种方法可以让我们以更优雅的方式去做:
- 将所有消息保存到数据库。 在websocket连接和重新连接上,获取所有消息比你的最新消息更新(这种方法假定你的聊天没有编辑function,因为编辑不会被这样获取)。 后者可以使用
HTTP
或WebSockets
。 - 如果您不想将消息存储在服务器中,则应在用于发送消息的设备中实现某种持久性caching。 这与您的原始解决scheme非常相似,不同之处在于不是将消息存储在数据库中,而是将其存储在用户的设备上。 这确实需要一些逻辑来检测什么时候收到消息,什么时候收件人重新连接,以便触发发送丢失的消息。
在我看来,第一种方法对于一般用例要好得多,但这取决于你的用例。
- 在nodejs中,我该如何检查一个端口正在侦听还是正在使用
- 将node.js服务器端代码移植到HTML5 WebSockets
- 在内存中的JS对象中可以容纳多less个socket.io对象,然后才能显着降低性能?
- Node.js和Socket.io来自ws的UTF8validationtypes错误
- sockets事件之间的区别
- socket io,node js,简单示例从服务器发送图像/文件到客户端
- 将消息发送到Socket,从C#客户端到node.js + socket.io服务器
- PHP发送消息给Node / Socket.IO服务器
- 来自JavaScript的PostgreSQL套接字(HTML5)