Socket.IO是一个可靠的聊天服务器为大量的用户,如果是的什么是你的堆栈?

我已经阅读了许多关于Socket.IO的博客,并且对它的function印象深刻。 我打算使用它的一个聊天应用程序和普通的用户数量最less的用户,它正在完美的工作。 但在生产networking中使用Socket.IO时是否有任何缺陷? Socket.IO最适合于消息stream量非常大的大型消息系统。 如果是的话,什么是最好的技术堆栈沿着Socket.IO使用,“即使在更多的负载时,100%可靠”。 任何人都已经有了Socket.IO在实现大规模消息传递系统方面的经验。 Stack我想用的是Socket.IO,Redis,Cassandra和MySQL。

到目前为止,我已经经历了许多Socket.IO的例子,许多人试图用不同的方式来做。 有些人使用Array来存储Socket ID,而有些人使用Redis。 我明白,使用Redis将有一定的帮助。 但我不想停在那里。 我想学习Socket.IO应用程序的最佳体系结构。

请build议我一个path。

编辑

对于我来说,最好的堆栈就是一种失败的速度比别人less的东西。

你首先需要明白的是,Socket.IO仅仅是一个抽象,对于WebSocket协议来说,它是一个非常优雅的抽象。 因为它拥有难以置信的支持 ,协议本身可能是您今天需要在服务器和客户端之间通过公共networking进行双向沟通的最佳select,所以您肯定是在正确的轨道上。

操作Socket.IO服务器所需的资源主要围绕总连接数量以及在任何给定时间点传输的数据。 据说,一个Socket.IO服务器绑定到networkingI / O,并将扩展到您的networking硬件可以处理的客户端数量。

值得考虑的是,Socket.IO是build立在asynchronousnetworking库之上的。 阻止其他服务的I / O被延迟,使服务器继续处理其他通信。 内存占用通常包含连接的内存中表示和正在传输的即时数据 – 即使一个客户端可能将兆字节的数据中继给其他客户端,它也会将数据以离散块的forms进行stream式传输,并且只要一个块成功传送给各方资源立即释放。

当然,即使在pipe理简单的通信时,如多个房间的多个用户之间的聊天消息,也不可能扩展到例如Freenode的规模,Freenode可能在成千上万个房间中有数十万个用户,一台服务器。

这就是Redis这样的服务所在,在这里你可以使用一个高度可用的中央存储来处理一些中间的,具有代表性的连接数据,通过跨多个Socket.IO实例无缝地分配客户端来进行横向扩展。

你可以通过使用像CoreOS这样的堆栈来描述你的架构的每个不同部分,可以通过可用的硬件来分布,在负载增加的时候引入新的实例,当etcd发现这些服务时,你可以达到99%以上的可靠性。或者突然变暗,并且像hipache一样分配WebSocket代理来保持所有的Socket.IO实例饱和,但是绝不允许任何耗尽所有可用资源。