socket.io redis java,在socket.io中使用RedisStore的示例

I am trying to scale a simple socket.io app across multiple processes and/or servers.

Socket.io supports RedisStore but I'm confused as to how to use it.

but I don't understand how using RedisStore in that code would be any different from using MemoryStore. Can someone explain it to me?

Also what is difference between configuring socket.io to use redisstore vs. creating your own redis client and set/get your own data?

I'm new to node.js, socket.io and redis so please point out if I missed something obvious.

解决方案but I don't understand how using RedisStore in that code would be any different from using MemoryStore. Can someone explain it to me?

The difference is that when using the default MemoryStore, any message that you emit in a worker will only be sent to clients connected to the same worker, since there is no IPC between the workers. Using the RedisStore, your message will be published to a redis server, which all your workers are subscribing to. Thus, the message will be picked up and broadcast by all workers, and all connected clients.

Also what is difference between configuring socket.io to use redisstore vs. creating your own redis client and set/get your own data?

I'm not intimately familiar with RedisStore, and so I'm not sure about all differences. But doing it yourself would be a perfectly valid practice. In that case, you could publish all messages to a redis server, and listen to those in your socket handler. It would probably be more work for you, but you would also have more control over how you want to set it up. I've done something similar myself:

// Publishing a message somewhere

var pub = redis.createClient();

pub.publish("messages", JSON.stringify({type: "foo", content: "bar"}));

// Socket handler

io.sockets.on("connection", function(socket) {

var sub = redis.createClient();

sub.subscribe("messages");

sub.on("message", function(channel, message) {

socket.send(message);

});

socket.on("disconnect", function() {

sub.unsubscribe("messages");

sub.quit();

});

});

This also means you have to take care of more advanced message routing yourself, for instance by publishing/subscribing to different channels. With RedisStore, you get that functionality for free by using socket.io channels (io.sockets.of("channel").emit(...)).

A potentially big drawback with this is that socket.io sessions are not shared between workers. This will probably mean problems if you use any of the long-polling transports.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值