如何在通过soket.io获得客户端后从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中删除数据。

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

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

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

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

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

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

最新更新