我正在为一个应用开发聊天/留言功能.当用户发送消息时,我希望触发并广播特定事件.然后,我希望Laravel Echo使用pusher
驱动程序,通过Laravel Echo在活动的广播频道上收听活动.
我希望Laravel Echo实现位于Vue组件中,并检索通过事件广播的数据.目前,我无法通过私有频道或仅通过某个频道播放活动.
以下是我所做的:
1) 将配置添加到.env
.
2) 将配置添加到bootstrap.js
:
window.Echo = new Echo({
broadcaster: 'pusher',
key: 'mykey',
encypted: false
});
3) 添加了身份验证签入App\Providers\BroadcastServiceProvider
(如果用户现在已登录,则仅返回true):
Broadcast::channel('chat', function ($user) {
// verify that user is recipient of message
return \Auth::check();
});
4) 从App\Providers\BroadcastServiceProvider::class,
增加到App/config/app.php
.
5) 创建了事件App\Events\UserSentMessage
,它在名为chat
的PrivateChannel
上广播.我还试着向Channel
频道广播.我判断了一下,这个事件是从一个控制器中的event()
助手的呼叫中触发的,它似乎没有被广播.我也try 过在上面提到的控制器中使用broadcast
方法.
6) 在有效的Vue组件中的mounted
Vue生命周期挂钩中添加了以下内容(组件按预期呈现数据等,只是不使用Laravel Echo atm):
Echo.private('chat').listen('UserSentMessage', (data) => {
console.log(data);
}, (e) => {
console.log(e);
});
他们也try 过:
Echo.channel('chat').listen('UserSentMessage', (data) => {
console.log(data);
}, (e) => {
console.log(e);
});
Vue组件正在成功订阅指定的频道.pusher调试控制台识别出它正在被订阅,但触发的事件永远不会被广播.
似乎广播这件事有问题.我也try 过使用broadcast()
助手,而不是event()
助手.
此外,当通过Echo.private()
通过Laravel Echo订阅活动时.它似乎以private
作为频道名称的前缀,所以我也try 了(在事件中)向一个名为private-chat
的频道广播.