Функция Laravel "событие" не работает при трансляции события

У меня есть следующий код:

/routes/web.php

<?php

use App\Events\UserSignedUp;

Route::get('/', function () {
    $data = [
        'event' => 'UserSignedUp',
        'data' => [
            'username' => 'JohnDoe'
        ]
    ];
    //Redis::publish('test-channel', json_encode($data));
    event(new UserSignedUp('JohnDoe'));
    return view('welcome');
});

где я использую функцию: event(...),

У меня также есть следующее Event файл:

/app/Events/UserSignedUp.php

<?php

namespace App\Events;

use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

class UserSignedUp implements ShouldBroadcast
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $username;

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

    /**
     * Get the channels the event should broadcast on.
     *
     * @return \Illuminate\Broadcasting\Channel|array
     */
    public function broadcastOn()
    {
        return new Channel('test-channel');
    }

}

Затем я слушаю событие на Node.js файл:

/socket.js

var server = require('http').Server();
var io = require('socket.io')(server);
var Redis = require('ioredis');
var port = process.env.PORT || 3000;

var redis = new Redis();

redis.subscribe('test-channel');

redis.on('message', function(channel, message) {
    console.log(channel, message);
});

server.listen(port, function(){
    console.log('listening on *:' + port);
});

Моя проблема заключается в том, что, когда на файл выше: /routes/web.php я использую:

event(new UserSignedUp('JohnDoe'));

событие не прибывает в Node.js слушатель. Тем не менее, событие прибывает в Redis потому что я могу видеть это с: $ redis-cli monitor команда.

[РЕДАКТИРОВАТЬ 1] Вот что я получаю, когда event(...) функция называется:

1541489387.307573 [0 127.0.0.1:52109] "SELECT" "0"
1541489387.308379 [0 127.0.0.1:52109] "RPUSH" "queues:default" "{\"displayName\":\"App\\\\Events\\\\UserSignedUp\",\"job\":\"Illuminate\\\\Queue\\\\CallQueuedHandler@call\",\"maxTries\":null,\"timeout\":null,\"timeoutAt\":null,\"data\":{\"commandName\":\"Illuminate\\\\Broadcasting\\\\BroadcastEvent\",\"command\":\"O:38:\\\"Illuminate\\\\Broadcasting\\\\BroadcastEvent\\\":7:{s:5:\\\"event\\\";O:23:\\\"App\\\\Events\\\\UserSignedUp\\\":2:{s:8:\\\"username\\\";N;s:6:\\\"socket\\\";N;}s:10:\\\"connection\\\";N;s:5:\\\"queue\\\";N;s:15:\\\"chainConnection\\\";N;s:10:\\\"chainQueue\\\";N;s:5:\\\"delay\\\";N;s:7:\\\"chained\\\";a:0:{}}\"},\"id\":\"7CjGqwcRXoZhVIJyFU8AcQ5aTW8G6Cke\",\"attempts\":0}"

С другой стороны, когда я использую:

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

Событие прибывает в Node.js слушатель.

[РЕДАКТИРОВАТЬ 2] Вот что я получаю, когда Redis::publish(...) функция называется:

1541489590.930114 [0 127.0.0.1:52124] "SELECT" "0"
1541489590.930872 [0 127.0.0.1:52124] "PUBLISH" "test-channel" "{\"event\":\"UserSignedUp\",\"data\":{\"username\":\"JohnDoe\"}}"

Любая идея о том, почему событие не прибывает в Node.js событие слушателя, хотя прибывает в Redis сервер первый?

Благодарю.

0 ответов

Другие вопросы по тегам