Клиент эхо-сервера Laravel не получает событие

У меня есть небольшая установка Laravel Echo Server с использованием этого пакета (https://github.com/tlaverdure/laravel-echo-server). У меня есть следующая установка:

// app.js

import Echo from "laravel-echo";

window.Echo = new Echo({
    broadcaster: 'socket.io',
    host: 'http://vaprobash.dev:6001'
});

window.Echo.channel('documents-sharing')
    .listen("Api\\DocumentShared", (event) => {
    console.log(event);
});

.

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

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

redis.subscribe('documents-sharing', function(err, count) {
    console.log("subscribed " + count);
});

redis.on('message', function(channel, message) {
    message = JSON.parse(message);

    console.log('Message Received: ', channel, message);

    console.log(io.to(channel).emit(message.event, message.data));
});

.

// laravel-echo-server.json
{
    "authHost": "http://localhost",
    "clients": [
        {
            "appId": "986bb8954bb1e2e9",
            "key": "58ca6a205718590ad5fd88a1afc1877c"
        }
    ],
    "database": "redis",
    "databaseConfig": {
        "redis": {
            "port": "6379",
            "host": "localhost"
        },
        "sqlite": {
            "databasePath": "/database/laravel-echo-server.sqlite"
        }
    },
    "devMode": true,
    "host": "localhost",
    "port": "6001",
    "protocol": "http",
    "socketio": {},
    "sslCertPath": "",
    "sslKeyPath": ""
}

.

// DocumentShared.php
class DocumentShared implements ShouldBroadcast, ShouldBroadcastNow
{
    use SerializesModels, InteractsWithSockets;
    /**
     * @var User
     */
    public $user;
    /**
     * @var Resource
     */
    public $resource;
    /**
     * @var Share
     */
    public $share;

    /**
     * Create a new event instance.
     *
     * @param User $user
     * @param Resource $resource
     * @param Share $share
     */
    public function __construct(User $user, Resource $resource, Share $share)
    {
        $this->user = $user;
        $this->resource = $resource;
        $this->share = $share;
    }

    public function broadcastOn()
    {
        return new Channel("documents-sharing");
    }
}

.

// app.blade.php
<script src="{{ asset('js/socket.io.min.js') }}"></script>
<script src="{{ asset('js/home.js') }}"></script>

После этого я запускаю:

gulp watch
redis-server
node server.js
laravel-echo-server start
php artisan queue:listen

При попадании на маршрут /notify я запускаю событие.

Route::get('notify', function() {
    $user = User::first();
    $resource = Resource::first();
    $share = Share::first();

    event(new DocumentShared($user, $resource, $share));

    return 'done';
});

Я вижу, что сервер получил событие, и оно не отображается в очереди.

вывод терминала


person Younes Rafie    schedule 23.02.2017    source источник
comment
Вы видите что-то, что происходит в Redis с командой monitor?   -  person Robert    schedule 23.02.2017
comment
Да, событие получено правильно. Я думаю, что это что-то на фронтенде или я что-то упускаю!   -  person Younes Rafie    schedule 24.02.2017
comment
Как насчет замены window.Echo.channel() на Echo.channel() ?   -  person Robert    schedule 24.02.2017
comment
Ничего не произошло. Код кажется правильным?   -  person Younes Rafie    schedule 24.02.2017


Ответы (2)


Попробуйте перейти на socket.io-client: 2.3.0, если вы используете более новую версию. Это исправило это для меня после нескольких дней поиска решения.

person Jay    schedule 08.05.2021

Проблема в том, что клиентская сторона не может подключиться к серверу, потому что порт не отвечает. По иронии судьбы, я просто удалил ключ host из файла конфигурации laravel-echo-server.json и перезапустил сервер. Все работало как шарм!

person Younes Rafie    schedule 28.02.2017