我有一个监听套接字的socket.io服务器:
io.on('connection', (socket) => {
socket.on('myEvent', function(data){
socket.emit('eventReceived', { status: 1 });
});
});
我知道 Node.js 和 Socket.IO 不能在多线程中工作,所以我想知道如何有效地处理多个客户端,同时发送 myEvent。
我读过一些有关集群的内容。只需在我的项目前面添加以下代码那么简单吗?
const cluster = require('cluster');
const os = require('os');
const socketIO = require('socket.io');
if (cluster.isMaster) {
const numCPUs = os.cpus().length;
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 {
//my socket code
}
我还阅读了一些有关 Redis 的内容,在这种情况下它有何用处?它对树莓派有效吗?是否可以为每个用户创建一个新线程?
感谢您的帮助:)
据我所知,对 Node.js 进行集群应该可以有效地将工作负载分散到多个 CPU 核心之间。集群的代码片段是正确的,应该有助于解决任何可扩展性问题。我建议使用集群,因为我没有太多使用 Redis 的经验,但我确实知道它可以根据工作负载和资源提供帮助。