我有以下事件:
<?php
namespace SixtyFiveContrib\Events;
use Auth;
use SixtyFiveContrib\Events\Event;
use SixtyFiveContrib\Models\Notification;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
/**
* NotificationEvent
*
*/
class NotificationEvent extends Event implements ShouldBroadcast
{
use SerializesModels;
public $notification;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct(Notification $notification)
{
$this->notification = $notification;
}
/**
* Get the channels the event should be broadcast on.
*
* @return array
*/
public function broadcastOn()
{
return ['feed', 'updates'];
}
public function broadcastWith()
{
return ['notification' => $this->notification];
}
}
字符串
我在broadcasting.php中使用Redis驱动程序
'redis' => [
'driver' => 'redis',
'connection' => 'default',
],
型
然后,我从官方文档中获得了node应用程序,它运行良好并连接到客户端:
var app = require('http').createServer(handler);
var io = require('socket.io')(app);
var Redis = require('ioredis');
var redis = new Redis();
app.listen(3000, function() {
console.log('Server is running!');
});
function handler(req, res) {
res.writeHead(200);
res.end('Ayup.');
}
io.on('connection', function(socket) {
//
});
redis.psubscribe('*', function(err, count) {
console.log(err);
});
redis.on('pmessage', function(subscribed, channel, message) {
message = JSON.parse(message);
console.log(subscribed);
console.log(channel);
console.log(message);
io.emit(channel + ':' + message.event, message.data);
});
型
node app没有从Redis接收到任何信息?如果我手动进入Redis并运行`PUBLISH feed '{event:“SixtyFiveContrib\Events\NotificationEvent”}',那么node app确实会收到该消息。
提前干杯!
2条答案
按热度按时间m4pnthwp1#
我自己刚才也有这个问题。
显然,广播事件使用
QUEUE_DRIVER
:请参阅“队列优先级”:
在广播事件之前,您还需要配置和运行队列侦听器。所有事件广播都是通过排队作业完成的,因此应用程序的响应时间不会受到严重影响。
因此,要立即捕获事件,可以设置
QUEUE_DRIVER=sync
。但这当然不是建议,因为所有其他作业也会同步运行。
所以最好先设置一个合适的队列处理程序。
gpfsuwkq2#
未知的原因,但它与我的作品
字符串