Laravel Echo聆听不显示数据的变化

时间:2016-11-15 17:44:54

标签: node.js laravel-5 socket.io

我正在为我正在处理的应用构建实时通知功能。我使用Laravel 5.3,Node,Laravel Echo,Redis和socket.io。

我有我的事件设置,节点服务器侦听端口8888,redis pubsub是与节点工作的连接。后端的一切都在工作。

我的一件事:

class BecaCargada implements ShouldBroadcast
{
    use InteractsWithSockets, SerializesModels;

    public $usuario;

    public $mensaje;

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

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

当我生成此事件时,它会被触发并成功发布更改,我可以在redis-cli以及订阅和收听同一频道的nodeJS代码上看到。

是侦听同一频道的nodeJS代码:

require ('dotenv').config();

const server = require('http').Server();

const io = require('socket.io')(server);

const Redis = require('ioredis');

const redis = new Redis();

redis.subscribe('channel-notificaciones');

redis.on('message', function (channel, message) {
    const notificacion = JSON.parse(message);
    const emmitChannel = `${channel}:${notificacion.event}`;
    console.log(`Canal: ${emmitChannel}`);
    io.emit(emmitChannel, notificacion.data);
});

server.listen({
    host: process.env.NOTIFICACIONES_SOCKET_HOST,
    port: process.env.NOTIFICACIONES_SOCKET_PORT
});

对于我的js代码,我现在只有这个:

import Echo from "laravel-echo";

window._ = require('lodash');

window.io = require("socket.io-client");

const echo = window.Echo = new Echo({
    broadcaster: 'socket.io',
    host: `${process.env.APP_URL}:${process.env.NOTIFICACIONES_SOCKET_PORT}`
});


echo.channel('channel-notificaciones')
    .listen('BecaCargada', (e) => {
        console.log(e);
});

运行gulp并刷新后,我打开另一个选项卡并触发事件。如果我打开开发工具并查看套接字连接中的框架选项卡,我可以清楚地看到传入事件,channel:EventName,payload。

但是console.log(e)代码在控制台上没有显示任何内容。我已经检查了echo变量,一切似乎都没问题,命名空间,通道。

对可能出错的任何想法?

感谢和快乐的编码=)

0 个答案:

没有答案