如何通过soket.io获取客户端后从redis中删除数据?

时间:2013-11-25 18:30:39

标签: node.js redis socket.io node-redis

现在我每次都将数据推送到频道redis,当重新加载网页时,这些数据被叠加到redis并在这里一次又一次地显示:

$rediska->publish('real', 'PHP SENDING'); this is called every reload page

redisClient.on('pmessage', function(pattern, channel, message) {
    console.log("Sending from Redis: "+ channel); // here i get real, real, real, real

  });

如何控制它?我必须检查客户端是否收到消息真实,不再发送此信息后,如果用户点击按钮,则从redis删除数据。

1 个答案:

答案 0 :(得分:0)

我认为您的问题位于以下代码之外:

redisClient.on('pmessage', function(pattern, channel, message) {
 console.log("Sending from Redis: "+ channel); // here i get real, real, real, real
});

如果每次连接新用户时(在服务器端)都会调用此代码,则每次用户连接时都会添加另一个侦听器。因此,如果您重新加载页面3次,则服务器端处理程序将绑定3次pmessage事件。这就是你获得所有这些产出的原因。

要验证这一点,重新启动节点服务器,然后加载页面,你应该只看到一个“从Redis发送:”,然后再次重新加载页面,你应该是2个新的控制台输出。

如果是这种情况,只需将redisClient.on('pmessage'...代码放在.on('connected', ...处理程序之外,就可以了。

PS:如果这不能解决您的问题,您应该向我们发送更多代码(包括服务器端和客户端)