Node.js 使用Redis和Socket.io在Laravel 5.2中进行事件广播

Node.js 使用Redis和Socket.io在Laravel 5.2中进行事件广播,node.js,websocket,redis,socket.io,laravel-5.2,Node.js,Websocket,Redis,Socket.io,Laravel 5.2,我将Laravel 5.1更新为5.2,活动不再广播 我正在使用带有PHP7和hhvm、Node 5.3.0、Redis 3.0.6的Laravel homestead Redis工作得很好。(我试过Redis::publish) 我启动了事件,但没有收到任何消息 事件类 namespace App\Events; use App\Events\Event; use Illuminate\Queue\SerializesModels; use Illuminate\Contracts\Broa

我将Laravel 5.1更新为5.2,活动不再广播

我正在使用带有PHP7和hhvm、Node 5.3.0、Redis 3.0.6的Laravel homestead

Redis工作得很好。(我试过Redis::publish)

我启动了事件,但没有收到任何消息

事件类

namespace App\Events;

use App\Events\Event;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

class UserSignedUp extends Event implements ShouldBroadcast
{
    use SerializesModels;

    public $username;

    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct($username)
    {print_r($username);
        $this->username = $username;
    }

    /**
     * Get the channels the event should be broadcast on.
     *
     * @return array
     */
    public function broadcastOn()
    {
        return ['test-channel'];
    }
}
路线

Route::get('event', function () {
    $data = [
        'event' => 'UserSignedUp',
        'data' => [
            'username' => 'JohnDoe'
        ]
    ];

// Works fine
    Redis::publish('test-channel', json_encode($data));

// It does not broadcast anything
    event(new \App\Events\UserSignedUp('JohnDoe'));
});
Socket.io服务器

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var Redis = require('ioredis');
var redis = new Redis();

redis.subscribe('test-channel', function (err, count) {
});

redis.on('message', function (channel, message) {
    console.log('Message Recieved: ' + message);

    message = JSON.parse(message);

    io.emit(channel + ':' + message.event, message.data);
});

http.listen(3000, function () {
    console.log('Listening on Port 3000');
});
环境配置

CACHE_DRIVER=redis
SESSION_DRIVER=redis
QUEUE_DRIVER=redis
BROADCAST_DRIVER=redis

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

触发的每个事件都会推送到redis队列中,若要广播,您必须释放队列中的作业,您可以使用

php artisan队列:侦听….

php工匠队列:工作


命令

每次触发的事件都会推送到redis队列中,若要广播,您必须释放队列中的作业,您可以使用

php artisan队列:侦听….

php工匠队列:工作


指挥部

你好!我在Laravel 5.3中也面临同样的问题。我尝试了
php-artisan-queue:work
php-artisan-queue:listen
,但都没有成功。如drd所述
事件(new\App\Events\TestEvent())不广播任何内容。还有其他推荐吗?你好!我在Laravel 5.3中也面临同样的问题。我尝试了
php-artisan-queue:work
php-artisan-queue:listen
,但都没有成功。如drd所述
事件(new\App\Events\TestEvent())不广播任何内容。还有其他建议吗?