【发布时间】:2019-05-13 11:32:45
【问题描述】:
我正在创建一个 Node.js 应用程序,用于在 HTML5 画布上进行协作绘图。我正在使用 Socket.IO 进行通信,并且我已经实现了集群,因此我能够扩展我的应用程序。我的讲师告诉我,使用集群是一个好主意,但让 CPU 中的每个核心都做同样的事情并不明智,也就是说,这违背了目的。因此,在我的情况下,让 8 个核心在完全相同的绘画上工作并不明智,而是可能有 8 种不同的绘画,每个核心一张绘画。我也知道 Socket.IO 只通过一个核心进行通信。现在我对从哪里开始以及如何开始有点困惑。我知道有这个“粘性”socket.io 模块,但它只是共享通信,而不是为每个核心制作不同的绘画?
这是我制作的服务器:
let http = require('http').Server(application);
let socketIO = require('socket.io')(http);
let cluster = require('cluster');
let cores= require('os').cpus().length;
if (cluster.isMaster) {
for (let i = 0; i < cores; i++) {
cluster.fork();
}
} else {
process.exit();
}
function connect(socket){
socket.on('test',
function emit(data) {
socket.broadcast.emit('test', data);
});
}
socketIO.on('connection', connect);
http.listen(port);
【问题讨论】:
-
我们期望 CPU 在这种情况下做什么?他们没有做任何正确的绘图吗?,他们只负责服务套接字/因此可以转移坐标/颜色?
-
没错,我只发出颜色和坐标
-
在我看来,你的 CPU 无论如何都会做同样的事情(socket.io 工作)。我认为,如果您有一些后台代理/工作人员角色来做不同的事情,那么拆分任务会更有意义。
-
我希望他们每个人都画不同的画 :)
-
这样我就不会为了一幅画浪费所有 8 个核心
标签: node.js sockets socket.io scalability sticky-session