【问题标题】:Laravel Broadcasting with Pusher isn't Listening with Vue使用 Pusher 的 Laravel 广播不使用 Vue 监听
【发布时间】: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
});

它将所有内容发送给 Pusher:

但我不知道如何使用 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/auth XHR 调用?此外,WS(Web 套接字)选项卡在 Chrome 开发工具中的外观如何?是否有建立连接的框架?
  • @Paras 是的,我看到了 (dropbox.com/s/puw7q2cjsukcptr/…),当发送消息时,我在 WS 选项卡中看到了这个:dropbox.com/s/vu20bvkf4zu13zv/… - 但仅此而已。在 Pusher.com 中,一切看起来都不错,并且可以正确查看连接和消息。
  • 我发现 WS 在实时环境中做得更多:dropbox.com/s/n1v5gstsw0txqfv/… - 但我的新聊天控制台中仍然没有打印任何内容
  • 你看到broadcasting/auth XHR 电话了吗?
  • @Paras 仔细检查了它,它并没有在实时服务器上在线显示。

标签: laravel laravel-5 pusher laravel-echo pusher-js


【解决方案1】:

根据您在 cmets 中的响应,您的 broadcasting/auth 请求调用不会被触发。这似乎表明您的 bootstrap.js 文件中的 Laravel Echo 代码没有被调用。

您可以对此进行测试的一种方法是在您的bootstrap.js 文件中添加一个console.log。可能的原因可能是 a) 错过了部署脚本运行,b) 您的应用入口点未调用 bootstrap.js

如果您错过了部署脚本运行,只需运行 npm run prod 即可解决问题。

【讨论】:

  • 谢谢。我现在在 bootstrap.js 的顶部添加了控制台记录器,并且信息显示在控制台中。所以引导程序正确包含。如何修复/检查#B?
  • 在 echo 初始化后添加 console.log(window.Echo.options) 并检查您的密钥和集群是否正确显示。另外,您是否在控制台中看到任何与 Echo 相关的错误?
  • {broadcaster: "pusher", key: "xxxxx", cluster: "eu", encrypted: true} - 控制台中没有错误。但是现在我发现了一些东西:bootstrap.js 中的控制台内容显示在我的本地开发机器上,但没有出现在生产实时服务器上。这可能是什么?
  • 是的,这意味着您可能错过了在生产服务器上的部署。你跑npm run prod了吗?
  • 不,我没有 ;-) 但是当我这样做时,它确实像在本地一样显示了控制台。我在控制台中检查了套接字是否正在运行,它是:socket_id: 125244.3578055 和 channel_name: private-chats.1 > 所以这是正确的,对吧?
猜你喜欢
  • 2019-09-14
  • 2017-04-15
  • 2021-07-02
  • 1970-01-01
  • 2020-03-24
  • 2021-08-15
  • 2021-11-09
  • 1970-01-01
  • 2017-07-04
相关资源
最近更新 更多