首页 > 解决方案 > 运行 socketio 和 nodejs 集群模块

问题描述

服务器

var cluster = require('cluster');

// Code to run if we're in the master process
if (cluster.isMaster) {

    // Count the machine's CPUs
    var cpuCount = require('os').cpus().length;

    // Create a worker for each CPU
    for (var i = 0; i < cpuCount; i += 1) {
        cluster.fork();
    }

    // Listen for terminating workers
    cluster.on('exit', function (worker) {

        // Replace the terminated workers
        console.log('Worker ' + worker.id + ' died :(');
        cluster.fork();

    });

// Code to run if we're in a worker process
}

else {
    const app = express();
    const server = require('http').createServer(app);

    const io = require('socket.io')(server);
    app.set('socketio', io);

    const port = process.env.PORT || 9090;

    server.listen(port,() => {
        console.log('Server running at http://127.0.0.1:' + port + '/');
    });
    io.on('connection', function (socket) {
      console.log("CONNECTED")
    });


}

客户

import io from 'socket.io-client'
    const socket = io('http://localhost:9090');
    socket.on('notification', (data) => {
      if(props.user && data.user._id === props.user._id) {
        this.setNotification(data.notification);
      }
    })

错误消息 http://localhost:9090/socket.io/?EIO=3&transport=polling&t=MaDRz1u&sid=VzBUqt22usNbdqKCAAAb 400(错误请求)

当我删除 if else 并保留 else 语句中的代码时,一切正常。我需要添加什么以便 sessionID 不是未知的。

响应对象是 {"code":1,"message":"Session ID unknown"}

标签: node.jsreactjsexpresssocket.io

解决方案


发生这种情况是因为集群创建的每个子进程不同步并且彼此不认识。为了克服这个问题,您需要一个适配器来在集群之间进行通信。

请参阅 Socket.io 文档来解决此问题。


推荐阅读