2013-11-25 49 views
0

现在我将数据推送到通道的Redis每次,当重新加载网页,这个数据放在堆栈的Redis,并在这里一次又一次显示:如何通过soket.io从客户端获取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

我觉得你的问题就位于下面的代码外:

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', ...处理程序之外,它就可以解决问题。如果这不能解决您的问题,您应该向我们发送更多代码(在服务器和客户端)