Node.js 这会利用多个CPU核吗?

Node.js 这会利用多个CPU核吗?,node.js,sockets,http,nginx,load-balancing,Node.js,Sockets,Http,Nginx,Load Balancing,我的Socket.IO节点服务器运行在Nginx后面。我正在使用Nginx进行负载平衡。客户端被定向到以下端口之一: upstream nodes { ip_hash; server localhost:2000; server localhost:3000; server localhost:4000; server localhost:5000; } 我的节点服务器设置如下: function server(port){ const http = require(

我的Socket.IO节点服务器运行在Nginx后面。我正在使用Nginx进行负载平衡。客户端被定向到以下端口之一:

upstream nodes {
  ip_hash;

  server localhost:2000;
  server localhost:3000;
  server localhost:4000;
  server localhost:5000;
}
我的节点服务器设置如下:

function server(port){
  const http = require(`http`).createServer((req, res) => {
    // http stuff ...
  }.listen(port)

  const io = require(`socket.io`)(http)
  // socket stuff ...
}

server(2000)
server(3000)
server(4000)
server(5000)
节点是否在不同的核心上运行这些端口中的每一个,或者我在这里的负载平衡到底是什么


套接字代码应该放在服务器功能的内部还是外部?

否,它通常不会显著利用多核。node.js主要是单线程的。在同一node.js进程中启动5台服务器不会提供更多线程或进程,这些线程或进程可能会使用额外的内核。如果您的port 2000服务器正在为请求运行代码,则其他服务器都不能同时运行代码。他们将不得不等到Port2000服务器将控制权交还给one node.js线程。然后,另一台服务器可以得到一个请求并开始执行,所有其他服务器都必须等待它

您可能感兴趣的是集群模块,它将实际启动多个node.js进程(所有进程都做相同的事情),然后将请求分发到不同的进程。您不需要nginx来使用这种类型的集群,因为集群模块都是通过node.js软件完成的。有一个服务器侦听器,然后将传入的请求分发到各个集群进程

您可以在今天早些时候的另一个答案中了解更多信息,其中包括一篇非常好的博客文章,该文章解释了node.js集群的工作原理:


虽然您自己不想要一个核心、多个进程,但该问题涉及到许多体系结构问题。

不,它通常不会充分利用多个核心。node.js主要是单线程的。在同一node.js进程中启动5台服务器不会提供更多线程或进程,这些线程或进程可能会使用额外的内核。如果您的port 2000服务器正在为请求运行代码,则其他服务器都不能同时运行代码。他们将不得不等到Port2000服务器将控制权交还给one node.js线程。然后,另一台服务器可以得到一个请求并开始执行,所有其他服务器都必须等待它

您可能感兴趣的是集群模块,它将实际启动多个node.js进程(所有进程都做相同的事情),然后将请求分发到不同的进程。您不需要nginx来使用这种类型的集群,因为集群模块都是通过node.js软件完成的。有一个服务器侦听器,然后将传入的请求分发到各个集群进程

您可以在今天早些时候的另一个答案中了解更多信息,其中包括一篇非常好的博客文章,该文章解释了node.js集群的工作原理:


虽然您自己不想要一个核心、多个进程,但这个问题涉及到许多体系结构问题。

您发布的代码将运行一台服务器,在一个CPU核心上提供四个端口

不过,您可以在四个核心上运行四个独立的服务器,只需稍作更改。将端口作为命令行参数传递:

function server(port){
  const http = require(`http`).createServer((req, res) => {
    // http stuff ...
  }.listen(port)

  const io = require(`socket.io`)(http)
  // socket stuff ...
}

server(process.argv[2])
然后,将它们作为:

node index.js 2000 &
node index.js 3000 &
node index.js 4000 &
node index.js 5000 &


注意:Node.js实际上内置了集群功能。如果您想进一步探索集群,请阅读文档:

您发布的代码将运行一台服务器,在一个CPU核心上提供四个端口

不过,您可以在四个核心上运行四个独立的服务器,只需稍作更改。将端口作为命令行参数传递:

function server(port){
  const http = require(`http`).createServer((req, res) => {
    // http stuff ...
  }.listen(port)

  const io = require(`socket.io`)(http)
  // socket stuff ...
}

server(process.argv[2])
然后,将它们作为:

node index.js 2000 &
node index.js 3000 &
node index.js 4000 &
node index.js 5000 &

注意:Node.js实际上内置了集群功能。如果您想进一步探索集群,请阅读文档: