VladSavelev
@VladSavelev
Good man

Почему Node+Redis сервер не видит ивенты вызываемые Laravel (5.7)?

Помогите пожалуйста, уже не знаю где искать.. Что я делаю не так ?
Вот код node сервера:
const port = 6001;
let http = require('http').Server();
let io = require('socket.io')(http);
let Redis = require('ioredis');
let redis = new Redis;

// Подписывает клиента на данные шаблоны

redis.psubscribe('*', function (error, count) {
    console.log('psubscribe');
    console.log(error, count);
});

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

http.listen(port, function () {
   console.log('Listening on Port: '+ port);
});


Вот код ивента котрый должен подхватываться нашим редисом:

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

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

    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct()
    {
    }

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

    public function broadcastWith()
    {
        return [
            'time' => microtime(),
            'version' => 0.1
        ];
    }

    public function broadcastAs()
    {
        return 'micro-time';
    }
}


Вот конфиги:
BROADCAST_DRIVER=redis
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

Сам Редис включен.
Ивенты почему-то обрабатываются только через слушателя
( php artisan queue:listen)
Но метод ноды сервера
redis.on('pmessage')
не реагирует....
Кто знает в чем причина ? Помогите пожалуйста
  • Вопрос задан
  • 517 просмотров
Пригласить эксперта
Ответы на вопрос 2
VladSavelev
@VladSavelev Автор вопроса
Good man
Вообщем провернул все то же самое на laravel 5.2 - все отлично работает.
Редис слушает каналы.
Ответ написан
Alex_Wells
@Alex_Wells
PHP/TS developer
1) проверьте, не закеширован ли конфиг. Сделайте php artisan config:clear
2) "Ивенты почему-то обрабатываются только через слушателя" - потому что используете интерфейс ShouldBroadcast а не ShouldBroadcastNow. В вашем случае ивенты сначала попадают в очередь, а потом она их раскидывает.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы