使用套接字复用redis请求

下面部分代码段:使用套接字作为websocket,减少重复请求次数。

  
var io_put = io.listen(server);
buf = []
var re = require("redis");
var subscr = re.createClient();
io_input.on('connection',function(client){
console.log(client.request.headers.cookie);
subscr.get("...",function(err,replies){
});
subscr.on("message",function(channel,message){
var msg = { message: [client.sessionId, message] };
buf.push(msg);
if (buf.length > 15) buf.shift();
client.send(msg);
});

client.on('message', function(message){
});

client.on('disconnect', function(){
subscr.quit();
});
});

每一个新的io请求会重新链接redis。如果有人打开一百个tab,就会请求redis一百次。有没有什么办法优化socket,如果打开多个tab,就只请求一次?

评论 (2)链接2012-03-07 
  • 0 支持
    这应该归为JS问题吧,另外,客户端直接操作redis不太好吧? – magic 2012-03-07
  • 0 支持
    在服务端运行的js。。 – 冯义军 2012-03-07

其实只需要为每一个事件创建一个redis链接。例如创建一个聊天系统就只需要分配3个客户端链接。分出版,订阅和存入三个之一存入到redis。例如:

  
var socketio = require("socket.io")
var redis = require("redis")

// redis clients
var store = redis.createClient()
var pub = redis.createClient()
var sub = redis.createClient()

// ... application paths go here

var socket = socketio.listen(app)

sub.subscribe("chat")

socket.on("connection", function(client){
client.send("welcome!")

client.on("message", function(text){
store.incr("messageNextId", function(e, id){
store.hmset("messages:" + id, { uid: client.sessionId, text: text }, function(e, r){
pub.publish("chat", "messages:" + id)
})
})
})

client.on("disconnect", function(){
client.broadcast(client.sessionId + " disconnected")
})

sub.on("message", function(pattern, key){
store.hgetall(key, function(e, obj){
client.send(obj.uid + ": " + obj.text)
})
})

})
该答案已被锁定,无法对其进行评论,编辑及投票。
()
评论 (0)链接 • 2012-03-08

不是您所需,查看更多相关问题与答案

德问是一个专业的编程问答社区,请 登录注册 后再提交答案