【问题标题】:Node.js cluster moduleNode.js 集群模块
【发布时间】:2012-05-23 17:35:03
【问题描述】:

请帮忙。我正在使用 nodejs 集群模块:http://nodejs.org/docs/v0.6.18/api/cluster.html。我有以下代码:

运行.js

var cluster = require('cluster');

if (cluster.isMaster) {
    require('os').cpus().forEach(function () {
        cluster.fork();
    });
} else {
    require('./worker.js');
}

worker.js

var http = require('http'),
    connect = require('connect'),
    sio = require('socket.io'),
    // create server
    app = connect(),
    server = http.createServer(app);

server.listenPort(80);

var io = sio.listen(server);
// io.sockets.on ....

所有工作人员都监听 80 端口。每个连接都服务于一个随机工作人员(?)。我可以在用户连接的地方切换工作人员吗?

对不起,我的英语不好

【问题讨论】:

    标签: node.js cluster-computing


    【解决方案1】:

    如果您真的需要切换,您可以使用 sockets / socket.io 在集群之间进行通信并发送您的工作。

    否则,你不能。但只是好奇 - 你为什么要这样做?

    【讨论】:

    • 我创建的游戏没有工​​作人员之间的通信,所有数据都保存在内存中的 js 对象中。现在,我想用集群模块启动一些工人,但是如果两个用户连接到不同的工人,他就不能一起玩。我知道,我可以在工作进程中使用“process.send”,在主进程中使用“worker.on”,但切换用户工作人员对我来说是更简单、更快捷的解决方案。
    • 也许你不应该在游戏中使用集群
    • 也许吧,但没有它,我不能使用多个 cpu 核心,伤心
    • 我认为你的做法是错误的。与其将共享的 js 对象直接保存在内存中,不如将它们存储在内存映射存储(如 memcached 或 redis)中,以便所有工作人员都可以轻松访问它们。
    • @skyman 你的应用程序代码应该是无状态的,状态信息应该在一个常见的地方,比如像redis、memcached这样的快速存储
    【解决方案2】:

    您应该研究一下 WebRTC,它支持点对点连接,非常适合多人游戏。

    我的 2 美分。

    【讨论】:

      猜你喜欢
      • 2018-03-07
      • 2021-04-12
      • 2013-07-14
      • 1970-01-01
      • 2014-06-01
      • 2021-12-11
      • 1970-01-01
      • 2016-07-08
      • 1970-01-01
      相关资源
      最近更新 更多