ejabberd与socket.io+redis的优势

ejabberd与socket.io+redis的优势,socket.io,xmpp,ejabberd,Socket.io,Xmpp,Ejabberd,我正在开发一个web服务,我们期望它很快就会大规模扩展。该服务现在是使用socket.io集群通过redis层进行通信构建的 我想知道的是,改用ejabberd是否有好处?XMPP服务器会比node.js+socket.io服务器处理更多的并发用户吗?老实说,并发用户的数量不仅仅取决于您的实现。谷歌搜索并没有给我明确的答案,哪一个更可靠。XMPP是一个标准,因此有规则。Web套接字也是一种标准,但它没有一套非常具体的规则来管理消息传递。我的意见是测试这两个,看看你更喜欢哪一个。如果您需要对消息进

我正在开发一个web服务,我们期望它很快就会大规模扩展。该服务现在是使用socket.io集群通过redis层进行通信构建的


我想知道的是,改用ejabberd是否有好处?XMPP服务器会比node.js+socket.io服务器处理更多的并发用户吗?

老实说,并发用户的数量不仅仅取决于您的实现。谷歌搜索并没有给我明确的答案,哪一个更可靠。XMPP是一个标准,因此有规则。Web套接字也是一种标准,但它没有一套非常具体的规则来管理消息传递。我的意见是测试这两个,看看你更喜欢哪一个。如果您需要对消息进行超级控制,以及消息会发生什么情况,我建议使用socket.io;如果您想要一个经过测试的标准,而不需要超级控制,请尝试使用XMPP


另外,请检查一下:

老实说,并发用户的数量不仅仅取决于您的实现。谷歌搜索并没有给我明确的答案,哪一个更可靠。XMPP是一个标准,因此有规则。Web套接字也是一种标准,但它没有一套非常具体的规则来管理消息传递。我的意见是测试这两个,看看你更喜欢哪一个。如果您需要对消息进行超级控制,以及消息会发生什么情况,我建议使用socket.io;如果您想要一个经过测试的标准,而不需要超级控制,请尝试使用XMPP


另外,请查看:

XMPP的优点是它是标准的,并且提供了大量现成的特性。根据项目的范围和目标,您可能需要在socket.io中重新设计许多内容

关于可伸缩性,我所能说的是,我们与ejabberd在可伸缩性方面取得了良好的结果。我从未尝试过node.js/socket.io,所以我不能说


它最终取决于您需要的功能。

XMPP的好处在于它是标准的,并且提供了大量现成的功能。根据项目的范围和目标,您可能需要在socket.io中重新设计许多内容

关于可伸缩性,我所能说的是,我们与ejabberd在可伸缩性方面取得了良好的结果。我从未尝试过node.js/socket.io,所以我不能说


它最终取决于您需要的功能。

Socket.io很难像XMPP当前的解决方案那样进行扩展,尤其是ejabberd

即使您决定使用Redis Store扩展socket.io,因为大多数文章都提到socket.io的存储概念是基于同步集群中每个连接节点之间的所有连接数据的思想构建的。在Socket.IO中使用哪种类型的存储并不重要,因为它们都使用这个概念,因为它内置于Socket.IO存储接口中,而不是您正在使用的存储

为了理解为什么同步对Socket.IO存储有害,我们首先需要知道什么是同步的。我们可以在Socket.IO管理器的initstore函数中找到此信息。这就是:

握手数据,握手数据包括所有请求头、查询字符串、ip地址、信息、URL以及您在授权期间添加的可能自定义数据。 打开、连接甚至关闭的所有连接的ID。 房间名称和加入房间的每个id。 所有这些数据将通过发布/订阅同步到每个连接的Socket.IO服务器。因此,如果您有两个节点进程,并且它们都使用Socket.IO存储,那么它们将在各自的进程内存中拥有所有连接的所有数据。不像你想象的那样,在redis中。如果您有500个已连接的用户,这可能不是一个问题,但一旦您接近5.000>连接,这可能会迅速增加

查看以下可能有用的文章:


io很难像XMPP当前的解决方案那样进行扩展,尤其是ejabberd

即使您决定使用Redis Store扩展socket.io,因为大多数文章都提到socket.io的存储概念是基于同步集群中每个连接节点之间的所有连接数据的思想构建的。在Socket.IO中使用哪种类型的存储并不重要,因为它们都使用这个概念,因为它内置于Socket.IO存储接口中,而不是您正在使用的存储

为了理解为什么同步对Socket.IO存储有害,我们首先需要知道什么是同步的。我们可以在Socket.IO管理器的initstore函数中找到此信息。这就是:

握手数据,握手数据包括所有请求头、查询字符串、ip地址、信息、URL以及您在授权期间添加的可能自定义数据。 打开、连接甚至关闭的所有连接的ID。 房间名称和加入房间的每个id。 所有这些数据将通过发布/订阅同步到每个连接的Socket.IO服务器。所以如果你有 2个节点进程,它们都使用Socket.IO存储。它们都将在自己的进程内存中拥有所有连接的所有数据。不像你想象的那样,在redis中。如果您有500个已连接的用户,这可能不是一个问题,但一旦您接近5.000>连接,这可能会迅速增加

查看以下可能有用的文章:


它使用socket.i和redis做什么?闲聊如果我知道它的用途,我可以更好地回答这个问题。是的,聊天:既可以私人聊天,也可以与多个用户聊天。所有消息/线程都存储在服务器中,这一点很重要。10000,10000000…它使用socket.i和redis做什么?闲聊如果我知道它的用途,我可以更好地回答这个问题。是的,聊天:既可以私人聊天,也可以与多个用户聊天。所有消息/线程都存储在服务器中,这一点很重要。10,000, 10,000,000...