【问题标题】:How to build chat system between users with Socket.io?如何使用 Socket.io 构建用户之间的聊天系统?
【发布时间】:2015-11-09 00:16:04
【问题描述】:

我正在尝试在用户之间构建消息/聊天系统。

遵循规则是消息系统的主要特点。

  • 每个用户都可以向其他用户发送消息,并且只接受一对一聊天。(这意味着只有两个用户可以共享消息)。如果有名为 A 到 Z 的用户,用户 A 可以向 B 发送消息到 Z,但所有消息都是独立的,所以它就像一对一的聊天系统。 A、B 和 C 不能在同一个消息框(聊天室)中进行对话。
  • 应该实时发送/接收消息,这就是我决定使用 Socket.io 的原因
  • 用户退出后,消息历史记录被保存,以便用户在他/她再次登录时可以看到它。

我认为这就是它的工作方式。

  • 当用户 A 登录时,服务器使用唯一标识符为用户 A 创建一个唯一的房间,即 req Token 中的 userId。因此,每个用户在登录时都会加入一个房间。

    io.sockets.on('connection', function (socket) { socket.on('join', function (data) { socket.join(data.userId); }); });

    现在,其他用户可以实时向用户 A 发送消息。当然用户A也可以向特定用户发送消息并实时获取消息。
    io.sockets.in('userId').emit('msg', {msg: 'hi!'});

  • 如果用户A想给用户B发送消息,但是用户B当前没有登录,也就是说用户B没有空间,那么用户A发送的消息保存在.txt文件和文件路径中保存在数据库中。

  • 稍后当用户B勾选消息框时,用户B可以通过加载.txt文件查看所有消息历史记录。

所以,如果用户A和B都登录了,它可以是实时聊天,如果一个用户没有登录,也可以是消息系统。

【问题讨论】:

  • 为什么不将聊天保存到数据库而不是文本文件?
  • @AEonAX 我正在使用 MySQL,但我还没有看到好的做法。很多人建议我用txt文件来做。如果您推荐DB而不是文本文件,请告诉我为什么DB优于txt文件的原因?我真的不习惯。
  • 因为您将只提供 1 -1 聊天。看来您只需要 DB=> 1. MsgID 2. SenderId 3. ReceiverID 4.Message 5.IsDelivered 中的这些列。以及另一个存储用户的表。然后就可以通过 ReceiverID 和 IsDelivered 字段查询
  • 服务器上基于文件的方法难以保持一致性和完整性。

标签: node.js socket.io chat


【解决方案1】:

使用 Socket.io 是一个好的开始,但要构建一个全面的聊天应用程序需要做很多工作。如果您想跳过从头开始构建一切的痛苦,您可以参考 Hyphenate SDK(iOS、Android 和 Web),它是通过套接字进行的实时通信。

Hyphenate 支持 Mobile 和 Web SDK,具有丰富的功能和非常可靠的服务。它还提供开源 UI 组件,因此您无需从头开始构建所有内容。

https://docs.hyphenate.io

https://github.com/HyphenateInc

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2015-02-28
  • 1970-01-01
  • 1970-01-01
  • 2010-12-25
  • 1970-01-01
  • 1970-01-01
  • 2019-11-07
  • 2014-02-03
相关资源
最近更新 更多