nodejs实现多线程 网络请求
时间: 2023-11-08 11:55:45 浏览: 46
Node.js 本身是单线程的,但是可以使用一些模块来实现多线程。其中,cluster 模块是 Node.js 官方提供的用于实现多进程的模块,可以在一个 Node.js 进程中创建多个子进程,每个子进程都可以处理请求。
以下是一个使用 cluster 模块实现多线程网络请求的示例代码:
```javascript
const cluster = require('cluster');
const http = require('http');
const numCPUs = require('os').cpus().length;
if (cluster.isMaster) {
console.log(`Master ${process.pid} is running`);
// Fork workers.
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`worker ${worker.process.pid} died`);
});
} else {
console.log(`Worker ${process.pid} started`);
// Workers can share any TCP connection
// In this case it is an HTTP server
http.createServer((req, res) => {
res.writeHead(200);
res.end('hello world\n');
}).listen(8000);
console.log(`Worker ${process.pid} started to listen on port 8000`);
}
```
在上面的代码中,首先判断当前进程是否是主进程,如果是主进程则创建多个子进程,每个子进程都可以监听端口 8000,并处理 HTTP 请求。如果是子进程,则启动 HTTP 服务器。
这样,当有请求到达时,主进程会根据负载均衡算法将请求分配给一个子进程处理,从而实现了多线程处理网络请求的功能。