在客户端socket.io之间发送消息

时间:2015-09-12 17:50:31

标签: node.js sockets socket.io

我正在使用聊天应用程序并使用socket.io / node。基本上我想出了以下策略:

  1. 从客户端发送消息,该消息由套接字服务器接收,然后将其发送到接收客户端。在后台,如果用户希望看到他的旧对话,我将其存储在DB上的消息中以便稍后检索。
  2. 此方法的专业人员是用户几乎立即收到消息,因为我们不等待数据库操作完成,但 con 是如果数据库操作失败并且客户端刷新其页面以获取消息的确切时间,那么它就不会得到它。

    1. 从客户端向服务器发送消息,然后服务器首先将其存储在数据库中,然后仅将其发送到接收客户端。
    2. 专业人士是我们确保只有在客户端存储在数据库中时才会收到该消息。 con 是因为我们将在减慢消息传递之间进行数据库操作,所以它将无法接近实时。

      1. 向客户端发送消息,然后将消息存储在缓存层(例如redis)上,然后立即将其广播到接收客户端。在后台继续从redis获取记录并更新DB。如果客户端刷新页面,我们首先查看数据库,然后查看redis层。
      2. 专业人员是我们更快地进行通信,并确保按需正确显示消息。 con 与上述实施相比,这是非常复杂的,我想知道是否有更简单的方法来实现这一目标?

        我的问题是,如果您正在构建一个确保两者的严肃聊天应用程序,那么还有什么方法可以实现 - 更快的通信和数据持久性。有什么策略,像facebook,whatsapp等应用程序使用相同的?我不是在寻找确切的例子,但有一些指示会有所帮助。

        感谢。

1 个答案:

答案 0 :(得分:2)

我会选择2号选项。我一直在做自己在节点中聊天应用程序,我发现这是最好的选择。保存在数据库中需要几毫秒,其中包括在数据库中写入的0.x毫秒和通信中的几毫秒延迟(https://blog.serverdensity.com/mongodb-benchmarks/)。

所以我会实时考虑这种方法。这样做的好处是,如果失败了,无论出于何种原因,您都可以向发件人显示失败的消息。

Facebook,whatsapp和许多其他大型消息传递应用程序都基于XMPP(jabber),这是一个非常非常大的即时消息协议,所有内容都有很好的文档记录,但它基于XML,所以你仍然需要解析所有的东西等,但幸运的是有很好的库来处理xmpp。因此,如果你想采用通用的方式,你可以使用XMPP,但是这个领域的大多数大玩家都没有遵循所有的标准,因为它没有我们今天习惯使用的所有功能。

我会去做我自己的版本,实际上,我已经做了一些事情(类似于松弛),如果你想我可以让你私下访问它。

所以要结束这个,2号就是要走的路(对我来说)。 XMPP很酷但也带来了很多复杂性。