套接字.为大量用户提供可靠的聊天服务器,如果是,您的堆栈是什么?

Is Socket.IO a reliable Chat server for large number of users, if yes what's your stack?

本文关键字:如果 堆栈 是什么 服务器 聊天 用户 套接字      更新时间:2023-09-26

我读了很多关于Socket的博客。我最近接触过它,对它的特点印象深刻。我计划使用它的聊天应用程序之一,并为正常数量的用户与最小数量的用户它是完美的工作。但是在Socket中有什么缺陷吗?IO在生产网络中使用时?套接字。IO最适合消息流非常大的大规模消息传递系统。如果是,那么沿着Socket使用的最佳技术堆栈是什么?IO使其工作"100%可靠,即使负载更多"。任何人都已经有了Socket的经验。实现大规模消息传递系统的IO。我想使用的堆栈是套接字。IO, Redis, Cassandra and MySQL.

到目前为止,我已经看了很多Socket的例子。我和很多人都在尝试用不同的方式去做。有些人使用Array来存储Socket id,而有些人使用Redis。我知道使用Redis肯定会有帮助。但我不想就此打住。我想学习Socket的最佳架构。IO程序。

请给我一个路径。

编辑

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

首先需要理解这个Socket。IO仅仅是WebSocket协议的一个抽象,而且是一个非常优雅的抽象。由于它享有令人难以置信的支持,当您需要在服务器和客户端之间通过公共网络进行双向通信时,该协议本身可能是您今天可以做出的最佳选择,因此您肯定走在正确的轨道上。

操作套接字所需的资源。IO服务器主要围绕在任何给定时间点上的连接总数和传输的数据。话虽如此,一个插座。IO服务器绑定到网络I/O,并将扩展到您的网络硬件可以处理的尽可能多的客户端。

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

当然,即使在管理直接的通信时,比如跨多个房间的多个用户之间的聊天消息,也不可能扩展到像Freenode这样的规模,它可以在数千个房间中拥有数十万用户,只有一台服务器。

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

今天你可以获得99%以上的可靠性,通过使用像CoreOS这样的堆栈来描述你的架构的每个不同部分,作为可以分布在可用硬件上的单元,随着负载的增加引入新的实例,像etcd这样的服务在这些启动或突然变黑时进行发现,以及像hipache这样的分布式WebSocket代理来保持你所有的Socket。IO实例饱和,但从不允许任何实例耗尽所有可用资源。