Exc*_*ion 5 javascript node.js socket.io socket.io-1.0
这些天我一直在阅读很多关于Socket.IO的博客,并对它的功能印象深刻.我计划将其中一个用于聊天应用程序,并且对于正常数量的用户而言,它使用的用户数量最少.但是在生产网络中使用Socket.IO时是否存在任何陷阱?Socket.IO最适合大规模消息传递系统,其中消息流将非常庞大.如果是的话,沿着Socket.IO使用的最佳技术堆栈是什么,使它"即使负载更多也能100%可靠".任何人都已经有过使用Socket.IO实现大规模消息传递系统的经验.我想要使用的堆栈是Socket.IO,Redis,Cassandra和MySQL.
截至目前,我已经经历了许多Socket.IO的例子,很多人都试图以不同的方式做.有些人使用Array来存储Socket ID,而有些则使用Redis.我知道使用Redis肯定会有所帮助.但我不想止步于此.我想学习Socket.IO应用程序的最佳架构.
请建议我走一条路.
编辑
对我来说,最好的堆栈只不过是,与其他人相比,失败率较低的东西.
Fil*_*vić 14
您首先需要了解Socket.IO仅仅是一个抽象,而且对于WebSocket协议来说非常优雅.由于它拥有令人难以置信的支持,当您需要在服务器和客户之间通过公共网络进行双向通信时,协议本身可能是您今天可以做出的最佳选择,因此您肯定是在正确的轨道上.
操作Socket.IO服务器所需的资源主要围绕连接总量和在任何给定时间点传输的数据.话虽如此,Socket.IO服务器绑定到网络I/O,并将扩展到您的网络硬件可以处理的客户端数量.
值得考虑的是Socket.IO是建立在异步网络库之上的.延迟阻止来自其他服务的I/O,使服务器能够继续处理其他通信.内存占用通常包含连接的内存中表示和正在传输的即时数据 - 即使一个客户端可能正在将兆字节的数据中继到其他客户端,它也会以离散的块流式传输数据,并且只要一个块就是成功传输给所有各方,资源立即释放.
当然,即使在管理简单的通信时,例如跨多个房间的多个用户之间的聊天消息,也不可能扩展到Freenode的大小,Freenode可以在数千个房间中拥有数十万用户,而且只是一台服务器.
这就是Redis等服务的用武之地,您可以使用高可用性的中央存储来为一些中间代表连接数据进行水平扩展,通过在多个Socket.IO实例之间无缝分配客户端.
今天你可以通过使用像CoreOS这样的堆栈将架构的每个不同部分描述为可以分布在可用硬件上的单元,在负载增加时引入新实例,像etcd这样的服务,以便在发现这些时发现,可以达到99%以上的可靠性或突然变暗,并分发像hipache这样的WebSocket代理,以保持所有Socket.IO实例的饱和度,但绝不允许任何人耗尽其所有可用资源.
| 归档时间: |
|
| 查看次数: |
3384 次 |
| 最近记录: |