ano*_*123 5 redis node.js socket.io
我想在3台不同的机器上安装socket.io服务器。我有一个负载平衡器设置,用于在不同服务器之间分配请求,但是如何将在socket.io中的连接函数中获得的套接字对象分配给不同服务器?我知道我们可以使用RedisStore pub / sub来发布和记录redis事件,但是假设我有一个连接到计算机1的客户端A,并且有一个连接到计算机3的客户端B。给客户B的消息?还是在socket.io中还有其他架构可以用来实现这一目标?
如注释中所述,套接字是两个不同机器(在这种情况下为客户端和服务器)之间的连接,因此无法共享。对于解决此问题的基本结构,您将需要3个组件:负载平衡器,套接字服务器和消息传递系统(Redis,RabbitMQ等)。
最外层是负载平衡器。并非所有浏览器都支持Web套接字,因此Web套接字库提供了HTTP轮询故障转移。本质上,客户端通过HTTP启动握手,然后服务器尝试将您的连接升级为基于直接TCP的双向二进制协议。如果成功,则可以通过Web套接字与服务器进行一对一连接。如果失败,则套接字库将通过轮询处理HTTP上的请求以模拟Web套接字。
因此,必须对负载平衡器进行配置,以确保客户端的所有请求都发送到同一服务器,或者多个服务器可能认为客户端从它们接收通信。
如预期的那样,服务器将处理所有客户端连接,并管理与客户端之间的所有通信。但是,当客户端发送消息时,服务器会将消息发布到Redis,Redis将通知其订阅者有新消息可用。从Redis收到消息后,每个服务器都会通知相应的客户端。
如果我们要逐步解决您的情况,则可能看起来像这样:
当然,有一些优化措施,可以不向每台计算机发送通知,这对于大规模使用很有用,但是希望这是对您所需要内容的很好总结。
归档时间: |
|
查看次数: |
1073 次 |
最近记录: |