【问题标题】:Socket.io and Redis pub/subSocket.io 和 Redis 发布/订阅
【发布时间】:2016-05-01 00:57:34
【问题描述】:

我想使用 socket.io,但我将运行我的应用程序的多个实例,所以这就是有趣的地方。

  • 我需要在不同的端口上运行多个实例。这里没问题。

  • 我决定不使用 Node 自己的集群,我将使用 Nginx 进行负载平衡(这就是我创建应用程序的多个实例的原因)。 Nginx支持websockets,所以也整理了这个。

  • 鉴于会有多个实例,并非所有实例都不能直接相互通信(用户 A 连接到实例 X,如果用户 B 连接到实例 Y,则它们无法通信,因为服务器彼此独立),所以我需要使用 Redis 的 pub/sub 机制作为包装器,以模仿 socketio 的发射和广播功能。这样,即使我有一个应用程序的多个实例或在不同的服务器上运行它,只要他们连接到同一个 Redis 服务器,每个人都可以相互交谈。为此,我需要使用 socket.io-redis 和 socket.io-emitter 模块。

我说对了吗,这种方法有问题吗?

【问题讨论】:

    标签: node.js nginx socket.io


    【解决方案1】:

    除了您确定在不同的端口上需要多个 Node 应用程序实例之外,这听起来很可能吗?因为您可能能够处理比您假设使用一台服务器更多的负载,并且有一些方法可以使用 socket.io 分离不同的通信通道。

    【讨论】:

    • 我想利用所有CPU,看来有两种方法可以实现,使用集群模块(原生解决方案)或创建多个实例(等于核心数),使用Redis for pub/ sub 用于套接字通信(因为如果它们不在同一服务器上,它们就不能直接相互通信)并让 Nginx 处理这些实例之间的负载平衡。它也应该适用于运行多个实例的多个服务器。对吗?
    • 我认为您所说的会起作用,只是想您可能想仔细检查一下您是否真的以这种方式受 CPU 限制。当然,如果您在一个进程中遇到 CPU/IO 问题,拥有一个可扩展的解决方案当然很好,但这并不能保证您会遇到瓶颈。
    • 我可能不会很快遇到这个瓶颈(也许永远不会),但我想要一个可扩展的解决方案,尽可能多地利用资源。谢谢!
    • @salep,我正在使用 Redis 3 发布和订阅自定义 C++11 输出插件,该插件在排序的 STL std::list 上缓冲航空电子消息,当它达到 5000 的长度时被刷新并在达到 redis.conf 硬和软 REDIS 客户端输出缓冲区 imits 时断开连接。我如何使用您创建多个实例的想法(等于内核数,使用 Redis 进行 pub/sub 进行套接字通信以处理 0.4 的负载每秒百万字节?谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-01
    • 2011-07-05
    相关资源
    最近更新 更多