Не работает связка Laravel + Redis + NodeJS + socket.io ioredis

Вроде всё должно работать, но почему то на node.js redis.on("message",..... не отрабатывает и даже в серверную консоль не пишет console.log(). Помогите разобраться.

Использую Homestead

.env

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

node.js успешно запускает сервер (пробовал и встроенный http, и express) - server.js

var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);

const Redis = require('ioredis');
const redis = new Redis();

redis.subscribe("news-action", function () {
    console.log('redis subscribe');
});

io.on('connection', function (socket) {
    console.log('a user connected');
});
io.on('disconnect', function () {
    console.log('user disconnected');
});

console.log("Status Redis:" + redis.status);

redis.on("message", function (channel, message) {
    console.log('Message received: ' + message);
    console.log('Channel: ' + channel);
    message = JSON.parse(message);
    io.emit(channel + ':' + message.event, message.data);
});

server.listen(3000, function () {
    console.log('Listening on Port: 3000');
})

Событие Laravel (имплементирует ShouldBroadcast) записывает данные в redis (redis-cli monitor это подтверждает):

vagrant@homestead:~$ redis-cli monitor
OK
1588773228.776438 [0 127.0.0.1:45916] "SELECT" "0"
1588773228.776597 [0 127.0.0.1:45916] "EVAL" "for i = 2, #ARGV do\n  redis.call('publish', ARGV[i], ARGV[1])\nend" "0" "{\"event\":\"App\\\\Events\\\\NewMessage\",\"data\":{\"message\":\"test message\",\"socket\":null},\"socket\":null}" "laravel_database_news-action"
1588773228.776627 [0 lua] "publish" "laravel_database_news-action" "{\"event\":\"App\\\\Events\\\\NewMessage\",\"data\":{\"message\":\"test message\",\"socket\":null},\"socket\":null}"

redis слушает нужный канал:

vagrant@homestead:~$ redis-cli PUBSUB CHANNELS
1) "news-action"

На клиенте подключена библиотека socket.io-client

Вот компонент Vue:

<template>
    <div class="container">
        <div class="row">
            <div class="col-sm-12">
                <div class="from-group">
                    <textarea rows="6" readonly class="form-control">{{ dataMessages.join('\n') }}</textarea>
                    <div class="input-group mb-3">
                        <input type="text" class="form-control" placeholder="Наберите сообщение" v-model="message">
                        <div class="input-group-append">
                            <button @click="sendMessage" class="btn btn-outline-secondary" type="button">Отправить</button>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</template>

<script>

    export default {
        data: function() {
            return {
                dataMessages: [],
                message: "",
            }
        },
        mounted() {
            var socket = io('http://a-7w.local:3000');

            socket.on('connect', function () {
                console.log('connected!');
            });

            socket.on("news-action:App\\Events\\NewMessage", function (data) {
                this.dataMessages.push(data.message);
                console.log("data result: " + data.message)
            }.bind(this));
        },
        methods: {

            sendMessage: function () {
                axios({
                    method: 'get',
                    url: '/vue-learn/send-message',//контроллер Laravel запускает event так - event(new NewEvent($result));
                    params: {
                        message: this.message,
                    }
                }).then((response) => {
                    this.message = "";
                });
            }
        }
    }

</script>

Ответы (0 шт):