【发布时间】:2018-10-25 15:13:07
【问题描述】:
对于 Laravel (v5.7),我正在尝试让广播与 Pusher 和 Vue 一起使用。
该应用程序就像一个聊天。当私聊有消息发送时,调用如下函数:
broadcast(new NewChat($message));
这是“NewChat”-事件:
class NewChat implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $message;
public function __construct(\App\Message $message)
{
$this->message = $message;
}
public function broadcastOn()
{
return new PrivateChannel('chats.' . $this->message->conversation_id);
}
public function broadcastWith()
{
return ['message' => $this->message];
}
}
channels.php 有:
Broadcast::channel('chats.{conversationId}', function ($user, $conversationId) {
return true; // security i'll do later
});
但我不知道如何使用 Vue 正确监听事件并全部更新。 以下是我在 boostrap.js 中添加的(都是用 Vue app 写的):
import Echo from 'laravel-echo'
window.Pusher = require('pusher-js');
window.Echo = new Echo({
broadcaster: 'pusher',
key: process.env.MIX_PUSHER_APP_KEY,
cluster: process.env.MIX_PUSHER_APP_CLUSTER,
encrypted: true
});
window.Echo.private(`chats.1`)
.listen('NewChat', (e) => {
console.log(e);
});
在示例中,我将数字 1 硬编码为私人频道,因为这与屏幕截图中的频道相同。
我错过了什么?我多次重新阅读文档页面并尝试按照教程查看我是否跳过了一些小的但不知道的内容。 有谁知道我遗漏了什么?
【问题讨论】:
-
在 Chrome 开发工具中,您是否看到成功的
broadcasting/authXHR 调用?此外,WS(Web 套接字)选项卡在 Chrome 开发工具中的外观如何?是否有建立连接的框架? -
@Paras 是的,我看到了 (dropbox.com/s/puw7q2cjsukcptr/…),当发送消息时,我在 WS 选项卡中看到了这个:dropbox.com/s/vu20bvkf4zu13zv/… - 但仅此而已。在 Pusher.com 中,一切看起来都不错,并且可以正确查看连接和消息。
-
我发现 WS 在实时环境中做得更多:dropbox.com/s/n1v5gstsw0txqfv/… - 但我的新聊天控制台中仍然没有打印任何内容
-
你看到
broadcasting/authXHR 电话了吗? -
@Paras 仔细检查了它,它并没有在实时服务器上在线显示。
标签: laravel laravel-5 pusher laravel-echo pusher-js