【问题标题】:multiple child_process with node.js / socket.io带有 node.js / socket.io 的多个 child_process
【发布时间】:2013-06-27 18:15:27
【问题描述】:

这更像是一个设计问题而不是实现,但我有点想知道我是否可以设计这样的东西。我有一个交互式应用程序(类似于 python shell)。我想托管一个服务器(可以说使用 node.js http 服务器或 socket.io,因为我不确定哪个更好),它将为每个连接到它的客户端生成一个新的 child_process 并维护不同的上下文那个特定的客户。就 node.js 或 socket.io 而言,我是一个完整的菜鸟。我管理的最大值是在 socket.io 服务器上有一个子进程并将客户端连接到它。 所以问题是,这行得通吗?如果没有,节点中是否有任何其他方法可以让它工作,或者我最好使用本地服务器。 谢谢

【问题讨论】:

    标签: node.js socket.io


    【解决方案1】:

    Node.js - 是单进程 Web 平台。使用集群(child_process),您将创建具有单独线程的同一应用程序的独立执行。
    每个线程都消耗内存,这通常是大多数传统系统的可扩展性不高的原因,因为每个客户端都需要线程。对于节点来说,从硬件资源的角度来看,效率会非常低。
    Node 是基于事件的,只要您的应用程序逻辑不利用它,您就不必担心范围。
    建议工作人员的数量与硬件上的 CPU 核心数相等。

    总有一个主应用程序,它将创建工作人员。每个工作人员将创建 http + socket.io 侦听器,从技术上讲,这些侦听器将绑定到主套接字并从那里路由。 http 请求将被路由到不同的工作人员,而套接字将在连接时刻被路由,但随后该工作人员将处理此套接字,直到它断开连接。

    【讨论】:

    • 非常感谢 Maksims。因此,如果子进程占用大量内存,则除非我们有另一台服务器进行负载平衡,否则很难扩展。
    • 负载平衡将通过所有工作人员毫无问题地发生。每个工作人员将能够在相对较好的硬件上处理数千个连接。如果您仍然需要,您可以创建 CPUCores * 4 个工作器,例如 4 个内核、16 个工作器。然后它们将分布在核心上,并且不会在内存上产生很大的开销。但不是每个连接的工作人员。 Node 与经典的阻塞平台有很大的不同,Node 确实非常有效地在一个线程上处理大量连接。
    猜你喜欢
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2021-12-30
    相关资源
    最近更新 更多