这是我的代码,使用 socket.io 作为 WebSocket,后端使用 pub/sub redis。
var io = io.listen(server),
buffer = [];
var redis = require("redis");
var subscribe = redis.createClient(); **<--- open new connection overhead**
io.on('connection', function(client) {
console.log(client.request.headers.cookie);
subscribe.get("..", function (err, replies) {
});
subscribe.on("message",function(channel,message) {
var msg = { message: [client.sessionId, message] };
buffer.push(msg);
if (buffer.length > 15) buffer.shift();
client.send(msg);
});
client.on('message', function(message){
});
client.on('disconnect', function(){
subscribe.quit();
});
});
每个新的 io 请求都会创建新的 redis 连接。如果有人打开带有 100 个选项卡的浏览器,那么 redis 客户端将打开 100 个连接。它看起来不太好。
如果cookie相同,是否可以重用redis连接?因此,如果有人打开许多浏览器选项卡也视为打开 1 个连接。