2013-06-26 43 views
0

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

回答

2

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

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

+0

非常感谢Maksims ..所以如果子进程需要大量内存,除非我们有另一台服务器进行负载平衡,否则将难以扩展。 – ssarangi

+0

负载平衡将通过所有工作人员没有任何问题发生。而且每个工作人员都能够在相对较好的硬件上处理数千个连接。如果你仍然需要,你可以创建CPUCores * 4工作者,例如4核心,16名工人。然后它们将被分散在Cores上,并且不会有大的内存开销。但不是每个连接的工作人员。 节点与经典的阻塞平台有很大的不同,并且Node可以非常有效地在一个线程上处理很多连接。 – moka