【问题标题】:Exception: Illuminate \ Broadcasting \ BroadcastException No message in PusherBroadcaster.php:119异常:Illuminate \ Broadcasting \ BroadcastException PusherBroadcaster.php:119 中没有消息
【发布时间】:2019-08-01 05:29:01
【问题描述】:

Laravel 5.8

我对整个推送器功能不熟悉,我一直在关注本教程并尝试它,

Create Web Notifications Using Laravel and Pusher Channels。

我已经一步一步地遵循它,当我通过访问测试 URL 手动测试事件时,我收到以下异常:

照亮\广播\广播异常 没有消息

C:\wamp\www\ares\vendor\laravel\framework\src\Illuminate\Broadcasting\Broadcasters\PusherBroadcaster.php

代码如下:

    $response = $this->pusher->trigger(
        $this->formatChannels($channels), $event, $payload, $socket, true
    );

    if ((is_array($response) && $response['status'] >= 200 && $response['status'] <= 299)
        || $response === true) {
        return;
    }

    throw new BroadcastException( // <-- Exception at this line
        is_bool($response) ? 'Failed to connect to Pusher.' : $response['body']
    );
}

/**
 * Get the Pusher SDK instance.
 *
 * @return \Pusher\Pusher
 */
public function getPusher()
{
    return $this->pusher;
}
}

我查看了其他一些堆栈溢出文章,其中谈到将 encrypted: true 更改为 encrypted: false 但这似乎没有任何影响。

【问题讨论】:

  • 这里也一样 - 有什么提示吗?
  • 当我 var_dump($response) 它显示 array(2) { ["body"]=> bool(false) ["status"]=> int(0) } 所以可能有一些东西整篇文章都错了

标签: php laravel-5 pusher


【解决方案1】:

如果您在 localhost 上工作,请尝试设置您的 .env 文件。

设置:

APP_URL=http://localhost

DB_HOST=localhost

然后运行

php artisan config:cache

【讨论】:

  • 您永远不应该在本地开发环境中缓存您的配置。 From the docs:在本地开发过程中不应运行该命令,因为在应用程序开发过程中经常需要更改配置选项。 如果您无意中在本地缓存了配置,则更有可能想要to clear those cached values:php artisan config:clear
【解决方案2】:

我 4 天前开始使用 Laravel,在实现实时聊天应用程序时遇到了同样的问题。搜索了很多天后,我发现这可能会根据您运行的 Laravel 版本而有所不同。如果是 5.8,可以通过在 config/broadcasting.php 文件的 pusher.options 数组中添加以下代码来解决这个问题:

'curl_options' => [
                CURLOPT_SSL_VERIFYHOST => 0,
                CURLOPT_SSL_VERIFYPEER => 0,
            ],

添加后,config/broadcasting.php 中的 pusher 数组应该如下所示。

'pusher' => [
        'driver' => 'pusher',
        'key' => env('PUSHER_APP_KEY'),
        'secret' => env('PUSHER_APP_SECRET'),
        'app_id' => env('PUSHER_APP_ID'),
        'options' => [
            'cluster' => env('PUSHER_APP_CLUSTER'),
            'encrypted' => true,
            'curl_options' => [
                CURLOPT_SSL_VERIFYHOST => 0,
                CURLOPT_SSL_VERIFYPEER => 0,
            ],
        ],
    ],

然后您可以运行php artisan config:cache(在某些情况下可能不需要),最后运行php artisan serve。您可以在推送器网站中查看您的应用程序,并查看您发送消息后收到的事件。 希望对你有帮助!!

【讨论】:

  • @Dharman 感谢您的建议!我试图让它工作,但结果证明这是一个本地问题,我设法通过您提供的链接解决了这个问题。当我使用 Forge 来管理我的部署时,SSL 配置已经由 Forge 管理,因此 SSL 连接按预期工作,而我的服务器中不需要这个参数。再次感谢。
【解决方案3】:

就像我在评论中提到的那样,当整个帖子出错并且不会做出回应时,就会发生这种情况。这就是引发第 116 行异常的原因。我之前改成域名了!

在我的例子中,我按照代码在“vendor/laravel/framework/src/Illuminate/Broadcasting/BroadcastManager.php”中找到了“createPusherDriver”方法。在这个地方我插入了这个

var_dump($config['key']);
var_dump($config['secret']);
var_dump( $config['app_id']);
var_dump($config['options']);
exit;

注意到我的选项仍然列出“主机”=>“本地主机”。

我通过执行php artisan config:cache删除了这些行并清除了配置缓存

在下次重新加载时,我的事件被触发并登录到控制台。

【讨论】:

    【解决方案4】:

    在我的 Laravel 5.8 版本之前完美运行。但是对于这种 Laravel 版本,encrypted' =&gt; true 或 encrypted' =&gt; false 在这种情况下并不重要。但是,根据 PUSHER 的建议,我开始广播:'useTLS' =&gt; true,。

    这是我的最终结果:

    'options' => [
                'cluster' => env('PUSHER_APP_CLUSTER'),
                'encrypted' => true,
                'useTLS' => true,
                'curl_options' => [
                    CURLOPT_SSL_VERIFYHOST => 0,
                    CURLOPT_SSL_VERIFYPEER => 0,
                ],
            ]
    

    【讨论】:

      【解决方案5】:

      感谢亲爱的@Bitart

      'useTLS' =&gt; true

      选项解决了我的问题。

      'options' => [
           'cluster' => env('PUSHER_APP_CLUSTER'),
           'useTLS' => true,
      ]
      

      【讨论】:

        猜你喜欢
        • 2018-07-07
        • 1970-01-01
        • 2018-06-08
        • 1970-01-01
        • 2020-08-18
        • 2018-03-03
        • 1970-01-01
        • 2014-04-05
        • 1970-01-01
        相关资源
        最近更新 更多