将socket.io与redis用作集群

时间:2017-09-06 13:22:31

标签: node.js sockets socket.io socket.io-redis

我正在尝试使用redis为我的socket.io应用程序实现一个集群,因为我希望利用服务器中的所有核心而不仅仅是一个核心而且还能够扩展到更多的服务器未来如有必要。

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

  • sticky-session(使用IP地址平衡请求。因此,客户端将始终连接到同一个工作服务器,而socket.io将按预期工作,但是在多个进程上)

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

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

我现在已经在我的本地服务器上安装了redis-server但是如何在下面获取当前代码以连接到我的本地redis-server并在几个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年起)。请查看您提供的链接中的评论。

0 个答案:

没有答案