在Laravel中使用Socket.io和Redis广播事件5.3

我试图用L5.3创build一个简单的事件广播选项,使用socket.io和Redis。 这些东西在服务器端工作正常,但不能在客户端工作。 这是我的代码。

事件代码

public $data; public function __construct($data) { // $this->data = $data; } /** * Get the channels the event should broadcast on. * * @return Channel|array */ public function broadcastOn() { return new PrivateChannel('test-channel'); } 

Socket.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(); redis.subscribe('test-channel', function(err, count) { }); redis.on('message', function(channel, message) { console.log('Message Recieved: ' + message); message = JSON.parse(message); io.emit(channel + ':' + message.event, message.data); }); http.listen(3000, function(){ console.log('Listening on Port 3000'); }); 

查看文件

 <script type="text/javascript"> var socket = io('http://localhost:3000'); socket.on('test-channel: App\\Events\\SomeEvent', function(message) { alert("not yet reached here") jQuery('#dynamic_content').append(message.data.name); }); </script> 

事件消防代码

 Route::get('test', function () { // Route logic... $data = array("id" => "1","name"=>"jobin" , "amount" => "1000"); Redis::publish('test-channel', json_encode($data)); event(new App\Events\SomeEvent($data)); return "event fired"; }); 

当我访问domain.app/test节点服务器控制台已经把结果如下。

 Message Recieved: {"id":"1","name":"jobin","amount":"1000"} 

我已经尝试了几个线程,我仍然无法弄清楚我在这里错过了什么。

我的ENV

 BROADCAST_DRIVER=redis CACHE_DRIVER=redis SESSION_DRIVER=database QUEUE_DRIVER=redis 

唯一的问题是无法反映在客户端,节点服务器的控制台和EventListener的处理方法工作正常(我可以在那里转储数据)。

任何想法家伙最后6个小时的工作。

已经试过这些任何暗示将高度赞赏。 谢谢。

私人频道在名称前添加private_ 。 在你的情况下,频道名称将是private_test-channel