在生产环境下(Ubuntu 20.04.4),Laravel WebSockets 中无法获取频道的当前状态。

5
我正在尝试在laravel-9.0项目上设置WebSockets。当我尝试打开/laravel-websockets时,控制台会出现以下错误信息。 该项目已在Ubuntu 20.04.4上设置。

pusher.min.js:8 WebSocket连接至 'wss://dev.mydomain.in:6001/app/mywebsocketkey?protocol=7&client=js&version=4.3.1&flash=false' 失败:

当我尝试使用以下URL通过Postman连接时,我得到了一个成功的响应。

wss://dev.mydomain.in:6001/app/mywebsocketkey?protocol=7&client=js&version=4.3.1&flash=false

我在Postman中收到了以下响应。
{
    "event": "pusher:connection_established",
    "data": "{\"socket_id\":\"371175048.259495464\",\"activity_timeout\":30}"
}

我已经按照Websockets文档进行了操作。

这里是broadcast.php的配置:

'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'),
                'useTLS' => true,
                'encrypted' => true,
                'host' => 'dev.mydomain.in',
                'port' => 6001,
                'scheme' => 'https',
                'curl_options' => [
                    CURLOPT_SSL_VERIFYHOST => 0,
                    CURLOPT_SSL_VERIFYPEER => 0,
                ]
            ],
            'client_options' => [
                // Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html
            ],
        ],

Websockets.php

'apps' => [
        [
            'host' => env('LARAVEL_WEBSOCKETS_HOST', "127.0.0.1"),
            'port' => env('LARAVEL_WEBSOCKETS_PORT', 6001),
            'id' => env('PUSHER_APP_ID'),
            'name' => env('APP_NAME'),
            'key' => env('PUSHER_APP_KEY'),
            'secret' => env('PUSHER_APP_SECRET'),
            'path' => env('PUSHER_APP_PATH'),
            'capacity' => null,
            'enable_client_messages' => true,
            'enable_statistics' => true,
            'encrypted' => true
        ],
    ],

bootstrap.js

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,
    wsHost: window.location.hostname,
    wsPort: 6001,
    forceTLS: true,
    disableStats: true,    
    enabledTransports: ['ws', 'wss'],
});

.env

PUSHER_APP_ID=1234
PUSHER_APP_KEY=mywebsocketkey
PUSHER_APP_SECRET=hjhasjdhajsh
PUSHER_APP_CLUSTER=mt1
LARAVEL_WEBSOCKETS_HOST="dev.mydomain.in"
LARAVEL_WEBSOCKETS_PORT=6001
LARAVEL_WEBSOCKETS_SSL_LOCAL_CERT="/usr/dev/ssl-fullchain.pem"
LARAVEL_WEBSOCKETS_SSL_LOCAL_PK="/usr/dev/ssl.key"
LARAVEL_WEBSOCKETS_SSL_PASSPHRASE=null

1
除此之外,您能否检查一下您的端口是否开放?在CentOS中使用 sudo netstat -tpunl | grep 6001 进行检查。 - Mr. Kenneth
app_env被设置为本地(local),端口6001已打开。我可以使用Postman访问它。 - asimdev
这是一个带有Ubuntu 20.04.4和PHP-FPM 8.1.12的Linode实例。 - asimdev
我不确定这是否能解决你的问题。在我的 Laravel 8 中,我在 composer 中使用了以下依赖: "beyondcode/laravel-websockets": "^1.13", "pusher/pusher-php-server": "~3.0",以及 npm 中的以下依赖: "laravel-echo": "^1.14.0", "pusher-js": "^7.4.0", - Mr. Kenneth
我现在认为我遇到了相同的错误。在安装SSL之前它是正常的。现在我得到了“通道当前状态不可用”的错误提示。 - Macdonald
显示剩余6条评论
1个回答

0
尝试在.env文件中为PUSHER_APP_IDPUSHER_APP_KEYPUSHER_APP_SECRET设置相同的值。

这并没有回答问题。一旦您拥有足够的声望,您将能够评论任何帖子;相反,提供不需要询问者澄清的答案。- 来自审核 - Insane Skull

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接