我如何使用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); });
这样使用redisClient
的actionSubscribe() redisClient
可以用来redisClient
消息
- 从MongoDB 2.6迁移到3.2。 我们可以跳过3.0的数据?
- 从NodeJS获取来自Cloudant / CouchDB数据库的最新文档
- 将socket.io连接到不同的地址
- 可以有很多function(超过10)来处理Node的asynchronous性质(特别是在添加到MySql数据库时)
- package.json中的“All Rights Reserved”许可证
- 如何使每个用户基地logging与hapi js
- 我该如何避免重载JavaScript CallStack?
- Grunt registerTask()不在列表中运行任务
- 用Winstonjslogging器logging节点给TypeError