我正在尝试使用 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 年以来)。请检查您提供的链接中的评论。