我正在尝试使用socket.io和Redis使用L5.3创建一个简单的事件广播选项。 服务器方面的工作正常,但在客户端不工作。 这是我的代码。
活动代码
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个小时来处理它。
已经尝试these 任何暗示都将受到高度赞赏。 谢谢。
答案 0 :(得分:2)
私人频道会在名称前添加private_
。在您的情况下,频道名称将为private_test-channel