2016-09-15 3 views
1

Я хочу использовать метод в контроллере yii2 для подписки на канал, чтобы я мог получать обновление в реальном времени в качестве подписанного клиента. Я использую redis pub/sub.Как мне подписаться на yii2 и redis?

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

Я также использую nodeJs, а ниже - код моего узла на сервере 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(); 
    }); 

}) ; 
+0

Обратите внимание, что весь код работал до тех пор, пока я не попытался подписаться с yii2 путем привязки 'redisClient.subscribe ('notification')' и введения 'yii2 actionSubscribe()' –

ответ

1

Учитывая выше код, который я думаю, что вы должны использовать redisClient в следующем разделе кода, если вы создаете его как

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

, так что actionSubscribe() с использованием redisClient используется для получения сообщения