Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Socket.IO是否为大量用户提供可靠的聊天服务器,如果是,请说明';你的堆栈是什么?_Javascript_Node.js_Socket.io_Socket.io 1.0 - Fatal编程技术网

Javascript Socket.IO是否为大量用户提供可靠的聊天服务器,如果是,请说明';你的堆栈是什么?

Javascript Socket.IO是否为大量用户提供可靠的聊天服务器,如果是,请说明';你的堆栈是什么?,javascript,node.js,socket.io,socket.io-1.0,Javascript,Node.js,Socket.io,Socket.io 1.0,最近我读了很多关于Socket.IO的博客,对它的特性印象深刻。我计划使用它的一个聊天应用程序和正常数量的用户与最小的用户数它是完美的工作。但是,Socket.IO在生产网络中使用时是否存在缺陷?是Socket.IO最适合于大规模消息传递系统,在这种系统中,消息传递流将非常巨大。如果是,那么Socket.IO使用的最佳技术堆栈是什么,以使其“即使在负载更大的情况下也能100%可靠地工作”。任何人都有过Socket.IO实现大规模消息传递系统的经验。 我想使用的堆栈是Socket.IO、Redis

最近我读了很多关于Socket.IO的博客,对它的特性印象深刻。我计划使用它的一个聊天应用程序和正常数量的用户与最小的用户数它是完美的工作。但是,Socket.IO在生产网络中使用时是否存在缺陷?是Socket.IO最适合于大规模消息传递系统,在这种系统中,消息传递流将非常巨大。如果是,那么Socket.IO使用的最佳技术堆栈是什么,以使其“即使在负载更大的情况下也能100%可靠地工作”。任何人都有过Socket.IO实现大规模消息传递系统的经验。 我想使用的堆栈是Socket.IO、Redis、Cassandra和MySQL

到目前为止,我已经浏览了许多Socket.IO的示例,许多人都在尝试以不同的方式进行操作。有些人使用数组存储套接字ID,而有些人使用Redis。我知道使用Redis肯定会有帮助。但我不想就此止步。我想学习Socket.IO应用程序的最佳体系结构

请给我建议一条去那里的路

编辑


对我来说,最好的堆栈不过是一个失败率比其他堆栈低的堆栈。

您首先需要了解Socket.IO对于协议来说只是一个抽象,而且是一个非常优雅的抽象。因为它很受欢迎,所以当您需要在服务器和客户机之间通过公共网络进行双向通信时,协议本身可能是您今天可以做出的最佳选择,因此您肯定走上了正确的道路

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

值得考虑的是,Socket.IO构建在异步网络库之上。延迟阻止来自其他服务的I/O,使服务器能够继续处理其他通信。内存占用通常包含连接和正在传输的即时数据的内存表示——即使一个客户端可能正在将兆字节的数据中继到其他客户端,它将以离散块的形式传输数据,一旦一个块成功地传输到所有各方,资源就会立即释放

当然,即使在管理简单的通信时,比如跨多个房间的多个用户之间的聊天信息,也不可能扩展到Freenode的大小,比如说Freenode,它可以在数千个房间中拥有数十万用户,而只有一台服务器

这就是像Redis这样的服务发挥作用的地方,在这里,您可以使用一个高可用的中央存储来存储一些中间的、具有代表性的连接数据,通过在多个Socket.IO实例之间无缝地分布客户端来水平扩展


通过使用CoreOS之类的堆栈将架构的每个不同部分描述为可分布在可用硬件上的单元,随着负载的增加引入新实例,在出现或突然变暗时提供etcd等服务,您现在可以获得99%以上的可靠性,分布式WebSocket代理喜欢让所有Socket.IO实例保持饱和,但决不允许任何实例耗尽其所有可用资源。

“100%可靠”知道这一点的人都不会在这里回答问题,因为他们将忙于在所有肮脏的金钱中游弋也就是“最佳X”非常主观,不可能回答不是你或你同事的任何人。@PeeHaa:)我理解你的句子。我要的是普尔曼的解决方案。我知道100%可靠也是非常主观的,但“昂贵的鞋子”对每个人来说都是不同的,至少:)这是一个非常好的答案。非常感谢。只是一个小小的更正。。。实际上,Socket.IO不是Web套接字的抽象。Web套接字是可以用作Socket.IO的单个传输。如果不可用,则使用其他传输,如长轮询JSON或闪存套接字。是的,谢谢@Brad。IO对于WebSocket就像Docker对于Linux容器一样。。。在理想情况下,Socket.IO将使用WebSocket进行传输,但它的许多优点还在于它能够优雅地回归到其他传输技术。