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

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

  1. 从客户端发送的消息由套接字服务器接收,然后发送给接收客户端。 在后台,如果用户希望看到他以前的对话,则将其存储在数据库上的消息中以供稍后检索。

这种方法的优点是用户几乎是立即得到消息,因为我们不等待数据库操作完成,但是如果数据库操作失败,并且恰好这时客户端刷新了它的页面来获取消息,它不会得到的。

  1. 从客户端发送消息到服务器,然后服务器将其存储在数据库中,然后只发送给接收客户端。

优点是我们确保消息只有存储在数据库中才会被接收到客户端。 因为我们将在减慢消息传递的过程中进行数据库操作,所以它将无法接近实时。

  1. 发送消息到客户端,然后存储在caching层(例如redis),然后立即将其广播到接收客户端。 在后台保持从redis获取logging并更新数据库。 如果客户端刷新页面,我们首先查看数据库,然后查看redis层。

优点是我们可以更快地交stream沟通,并确保消息按需呈现。 与上述实现相比,这是相当复杂的,我想知道是否有更简单的方法来实现这一点?

我的问题是,如果你正在构build一个严格的聊天应用程序,以确保两者 – 更快的通信和数据持久性是什么路要走。 什么是一些像Facebook,WhatsApp的应用程序等使用相同的应用程序的策略? 我不是在寻找确切的例子,但有几个指针会有所帮助。

谢谢。

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

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

Facebook,WhatsApp和许多其他大型消息应用程序都基于XMPP(jabber),这是一个非常非常大的即时通讯协议,一切都很好地logging如何做的事情,但它是基于XML,所以你仍然必须parsing一切等,但幸运的是有非常好的库来处理与XMPP。 所以如果你想用普通的方式,可以使用XMPP,但是这个领域的大多数玩家都不再遵循所有的标准,因为它没有我们今天使用的所有function。

我会自己动手做,其实我已经做了一些事情(类似于松懈),如果你想让我可以私下接触它。

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