Sơn*_*yễn 16 real-time publish-subscribe redis socket.io
我看到了这个片段:
io.sockets.on('connection', function(socket) {
const subscribe = redis.createClient();
const publish = redis.createClient();
socket.on('publish', function(channel, data) {
publish.publish(channel, data);
});
socket.on('psubscribe', function(channel) {
subscribe.psubscribe(channel);
});
subscribe.on("pmessage", function(pattern, channel, message) {
socket.emit('message', { channel: channel, data: message });
});
});
Run Code Online (Sandbox Code Playgroud)
$(".action").click(function() {
socket.emit('publish', 'game.#{gameid}.action.' + $(this).data('action'),
JSON.stringify({ nick: "#{nick}", ts: Date.now() })
);
Run Code Online (Sandbox Code Playgroud)
而我想知道为什么?Socket.IO有没有自己的广播机制?为什么选择Redis'Pub-Sub over Socket.IO?我们不能这样做:
io.sockets.on('connection', function(socket) {
socket.on('action', function(channel, data) {
socket.broadcast.to(channel).emit(data)
});
});
Run Code Online (Sandbox Code Playgroud)
如果有理由使用Redis,那么有什么好处呢?持久性?
Mon*_*son 16
我之所以选择在我的实时活动流项目中使用Redis的酒吧子与Socket.io(http://blog.cloudfoundry.com/2012/06/05/node-activity-streams-app-2/)是因为我想拥有多个Web服务器(Cloud Foundry上的实例或Heroku上的dynos).据我所知,Socket.io将消息存储在内存中(一个网络服务器),那么它如何可能广播到连接到另一个网络服务器的客户端?
查看帖子,让我知道它是否有帮助
这里使用 Redis 至少有两个原因。第一个是它作为发布和订阅机制运行得非常好,包括能够根据与 psubscribe 的模式匹配来选择消息。第二个原因是其他客户端可以轻松地通过redis机制进行发布和订阅。这并不是说不可能,只是方便而已。这与 Node.js 的异步性相结合,形成了强大的合作伙伴关系。
当然,这不是唯一的解决方案,但似乎效果很好。
| 归档时间: |
|
| 查看次数: |
6905 次 |
| 最近记录: |