Laravel Pusher Websocket 无法在 HTTPS 上运行

Laravel Pusher Websocket Not Working on HTTPS

我正在使用 Laravel 5.8,我们在我们的应用程序中使用带有 PUSHER 的网络套接字。它在本地或当我处于 HTTP 模式时完美广播。当我将我的设置更新为 HTTPS 时,广播不再有效。

Any hints on this ? anyone ?

我试过了

#客户端

window.Echo = new Echo({
    broadcaster: 'pusher',
    key: process.env.MIX_PUSHER_APP_KEY,
    cluster: process.env.MIX_PUSHER_APP_CLUSTER,
    wsHost: window.location.hostname,
    encrypted: false,
    // wsPort: 6001,
    // wssPort: 6001,
    disableStats: true,
    forceTLS: true,
    enabledTransports: ['ws', 'wss']
});

#服务器端

'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'),
        'scheme' => 'http',
        'useTLS' => true,
        'debug' => true,
        'curl_options' => [
            CURLOPT_SSL_VERIFYHOST => 0,
            CURLOPT_SSL_VERIFYPEER => 0,
            CURLOPT_IPRESOLVE => CURL_IPRESOLVE_V4
        ]
    ],
],

同样的结果!不工作!

它在 Chrome 本地完美运行,但 firefox

我在控制台看到了这个

您没有连接到正确的端口,或者 Echo 的默认端口不是您应该用于推送器的默认端口。在 JavaScript 前端 .env 文件中定义正确的端口。 (我不知道您的存储库设置,但有时您可以使用 .env.local 文件,例如在 Vue 设置中)。

Pusher 似乎使用默认 Web 端口 80 和 443,如下所述:https://pusher.com/docs/channels/library_auth_reference/pusher-websockets-protocol

.env 中定义端口后,更改 JavaScript 代码:

wsPort: process.env.MIX_PUSHER_WS_PORT, 
wssPort: process.env.MIX_PUSHER_WSS_PORT,

别忘了重建你的前端。

由于我的声望低,不能写评论,所以我会写在这里:

Try changing HTTP to HTTPS in 'scheme' => 'http'

在 websockets.php

中选中此选项

'verify_peer' => false,

另请查看本文中的配置示例:
https://www.digitalocean.com/community/questions/how-to-configure-laravel-websockets-with-ssl-on-nginx

既然你提到了,这是在本地发生的,你可能想看看这个 issue 因为它可能与你正在经历的事情有关......基本上有一个解决方法概述,让 firefox在套接字上使用自签名证书...

此外,如果从构造函数中删除 'wss' 会发生什么:

window.Echo = new Echo({
    broadcaster: 'pusher',
    key: process.env.MIX_PUSHER_APP_KEY,
    cluster: process.env.MIX_PUSHER_APP_CLUSTER,
    wsHost: window.location.hostname,
    encrypted: false,
    // wsPort: 6001, <-- Should these be commented out?
    // wssPort: 6001, <-- Should these be commented out?
    disableStats: true,
    forceTLS: true,
    enabledTransports: ['ws'] // removed wss
});

此外,您的端口被注释掉了...这看起来很奇怪,因为您需要一个到套接字服务的端口。