Pusher在Laravel 5.8中无法连接

时间:2019-05-29 02:27:08

标签: php laravel pusher laravel-5.8

我在Laravel 5.4中使用了Pusher,没有问题,但是现在我正在尝试使用laravel 5.8,但出现以下错误。我已经尝试了所有可以想到的方法,甚至将encrypted更改为false以防万一。我三重检查了我的推送凭证。

Laravel版本5.8

PHP版本7.2.18

操作系统OSX

我遇到错误

$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(
            is_bool($response) ? 'Failed to connect to Pusher.' : $response['body']
        );

我的ENV文件

BROADCAST_DRIVER=pusher
PUSHER_APP_ID=XXXXXX
PUSHER_APP_KEY=XXXXXXXXXXXXXXXXXXXX
PUSHER_APP_SECRET=XXXXXXXXXXXXXXXXXXXX
PUSHER_APP_CLUSTER=us2

我的事件文件

<?php

namespace App\Events;

use App\ChatRoomMessage;
use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

class NewMessage implements ShouldBroadcast
{
    use Dispatchable, InteractsWithSockets, SerializesModels;


    /**
     * Create a new event instance.
     *
     * @param ChatRoomMessage $chatRoomMessage
     * @return void
     */
    public function __construct()
    {

    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return \Illuminate\Broadcasting\Channel|array
     */
    public function broadcastOn()
    {
        return new Channel('message');
    }
}

我的路线

Route::get('/broadcast', function() {
    event(new \App\Events\NewMessage);
});

1 个答案:

答案 0 :(得分:0)

在Mac上将Laravel Valet与Php7.2或更高版本结合使用时,如何解决无法连接到Pusher的问题 ———————————————————————————————————————————— ---

注意:我决定写这篇文章是因为我认为其他人都不会花5个小时来解决这个问题,因为我已经做到了。

Server : Valet;

OS: Mac Mojave;

PHP Version: 7.2;

在我的情况下,将forceTLS设置为false可行,但是我不喜欢该解决方案。还添加:

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

对我的broadcast.php文件起作用了,但是由于某种原因,我也对这种解决方案不满意。

因此,我决定通过从https://curl.haxx.se/ca/cacert.pem下载CA软件包使事情正常进行,并将cacert.pem从下载文件夹移至/usr/local/etc/openssl@1.1/certs(在我的情况下,我已安装使用homebrew的openssl1.1只是因为我正在尝试各种在线尝试才能使此工作生效,但现在我知道我不需要openssl1.1,您可以使用已经拥有的openssl文件夹),所以cacert文件的完整路径变成/usr/local/etc/openssl@1.1/certs/cacert.pem 打开php.ini ————————---

从您的终端输入php --ini来找到已加载的php.ini的路径(在您选择的编辑器中打开该路径;有时我使用nano)。重要说明:自PHP 7.2(Win 64)起,此指令将不会在phpinfo()中显示,即使已设置。 (相比之下,如果将opensl.cafile指令设置为完全相同的路径,则会显示该指令。)

因此,现在在您的php.ini中将以下内容设置为:(注意:替换路径以指示可以在系统上找到这些文件的位置)openssl.cafile =“ /usr/local/etc/openssl@1.1/certs /cacert.pem'openssl.capath =“ /usr/local/etc/openssl@1.1/certs”注意:因为我使用的是php7.2,所以我不必将curl.cainfo设置为任何值;最初,我花了很多时间尝试使用curl.info方法,但这种方法对我不起作用,因此在我的最终配置中,我在其前面加了分号(; curl.cainfo =“ / usr / local / etc /openssl@1.1/certs/cacert.pem”)

此后,您应该运行valet restart,这将重新启动一些代客服务,但我意识到即使在代客重新启动后,我执行phpinfo()时,新的php.ini更改也不会反映出来。

最后,您应该通过输入brew服务重启php72来重启php(注意:我是通过自制软件安装的php,所以如果您没有,则必须以不同的方式重启php)

希望这会有所帮助。即使它不能完全解决您的问题,也一定会给您一些想法,就像我在构想我的解决方案时利用别人的一点想法从一页到另一页一样。