2

我正在尝试使用 redis 为我的 socket.io 应用程序实现一个集群,因为我想利用服务器中的所有内核,不仅是一个内核,而且如果有必要,将来还可以扩展更多服务器.

如果我理解正确,我将需要以下模块才能使其正常工作。

  • 粘性会话(使用其 IP 地址平衡请求。因此客户端将始终连接到同一个工作服务器,并且 socket.io 将按预期工作,但在多个进程上)

  • socket.io-redis(在不同的进程或服务器中运行多个 socket.io 实例,它们都可以相互广播和发射事件。

将来需要在不同服务器上共享工作进程时,我还需要nginx用作代理。如果我理解正确?

我现在已经redis-server在我的本地服务器上安装了,但是我怎样才能让我的当前代码连接到我的本地 redis 服务器并在几个服务器之间共享所有内容workers

var https = require("https"), fs = require("fs");
var options = {
    key:    fs.readFileSync('/path/privkey.pem'),
    cert:   fs.readFileSync('/path/cert.pem'),
    ca:     fs.readFileSync('/path/chain.pem')
};
var app = https.createServer(options, function(){

});
var io = require("socket.io")(app);
var all_clients = {};

io.set("transports", ["websocket", "polling"]);

io.on("connection", function(client){

    client.on("chat_message", function(data){
        // handle incoming chat message and emit to other user
    });

    client.on("disconnect", function(){
        // client disconnected
    });    
});

app.listen(8888, function(){
  // listening on port 8888
});

var recursive = function () {
  // echo currently connected sockets
  console.log("Connected sockets: "+io.engine.clientsCount);
  setTimeout(recursive,5000);
}
recursive(); 

编辑:您作为副本提供的链接中的答案在当前版本的 socket.io 中不起作用(自 2015 年以来)。请检查您提供的链接中的评论。

4

0 回答 0