我如何使用yii2和redis来订阅?

我想在yii2控制器中使用一个方法来订阅频道,以便我可以接收实时更新作为订阅客户端。 我正在使用redis pub / sub。

public function actionSubscribe(){ Yii::$app->redis->executeCommand('SUBSCRIBE', ['notification'], function($redis, $channel, $message){ print('I just did it!!!!!!'); }); return true; } 

我也使用nodeJs和以下是我的serverside nodeJs代码。 请问我做错了什么?

我从代码中提取拒绝工作的这一部分。

  socket.on("message", function(channel, message) { console.log("New message: " + message + ". In channel: " + channel); socket.emit(channel, message); }); 

以下是完整的代码

 var app = require('express')(); var server = require('http').Server(app); var io = require('socket.io')(server); var redis = require('redis'); server.listen(8890); io.on('connection', function (socket) { console.log("new client connected"); var redisClient = redis.createClient(); //RedisClient deliberately pegged because I want Yii2 php to do the //subscription to the notification channel; not nodeJs. //redisClient.subscribe('notification'); socket.on("message", function(channel, message) { console.log("New message: " + message + ". In channel: " + channel); socket.emit(channel, message); }); socket.on('disconnect', function() { // redisClient.quit(); }); }) ; 

考虑到上面的代码,我认为你应该使用下面的代码段中的redisClient ,如果你创build它

 **redisClient**.on("message", function(channel, message) { console.log("New message: " + message + ". In channel: " + channel); socket.emit(channel, message); }); 

这样使用redisClientactionSubscribe() redisClient可以用来redisClient消息