首页 > 解决方案 > webscokets 如何连接到集群内正确的子进程?

问题描述

我试图弄清楚 websockets 如何在 Nodejs/PM2 集群中工作。

我刚刚通过使用 PM2 启动 4 个子进程进行了一个实验,然后从客户端我向所有 4 个套接字服务器(每个子进程中运行 1 个 ws 服务器)发送了多个 webocket 消息。我没想到的一件事是 Node 能够确定套接字属于哪个进程,因此客户端发送的每条消息都由正确的子进程进行控制台记录。

那么这种行为是由 Nodejs 在内部由集群模块管理的吗?这似乎也是自 Node 12 以来的一个新功能?我可能错了...

代码参考(ws模块使用tsl):https ://github.com/websockets/ws/blob/master/lib/websocket.js#L663

PS:在写答案之前,请检查我写给其他人的评论...

标签: javascriptnode.jswebsocketpm2ws

解决方案


你可以试试这个:

    webSocket=function(server) {

    var io = require('socket.io')(server,{ transports: ['websocket', 'polling'] });
    var redis = require('socket.io-redis');
    var pub = require('redis').createClient(6379,'localhost');
    var sub = require('redis').createClient(6379,'localhost');
    io.adapter(redis({pubClient: pub, subClient: sub}));

    io.sockets.on('connection', function (socket) {
        console.log('Connection Establish!!!!!');
    )}
};


app.JS
https.createServer(options, app).listen(httpsAddress, function () {
    console.log("Express server listening on port " + config.get('PORT'));
    webSocket(this)
})

推荐阅读