You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中broadcast.php的Pusher配置无效,事件仍发往pusher.com

Laravel WebSocket 广播异常问题

我正在开发实时聊天应用,采用Laravel+WebSocket技术,使用beyondcode/laravel-websocket库。已将广播驱动设置为pusher,但触发event(new App\Events\UserStatusEvent())事件时,消息未发送至配置的localhost(127.0.0.1),而是发往pusher.com。已清除缓存和配置,问题仍未解决。


相关配置代码

1. broadcast.php 配置

'connections' => [
    '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'),
            'host' => '127.0.0.1',
            'port' => env('PUSHER_PORT', 6001),
            'scheme' => env('PUSHER_SCHEME', 'http'),
            'encrypted' => true,
        ],
        'client_options' => [
            // Guzzle client options
        ],
    ],
]

2. UserStatusEvent 事件类

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

    public function __construct()
    {
        //
    }

    public function broadcastOn()
    {
        return new PresenceChannel('status-update');
    }
}

3. .env 配置

BROADCAST_DRIVER=pusher
CACHE_DRIVER=array
FILESYSTEM_DRIVER=local
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120

PUSHER_APP_ID=skldfjiklkd
PUSHER_APP_KEY=sdlkfewif
PUSHER_APP_SECRET=slkdfifwef
PUSHER_APP_CLUSTER=mt1

4. bootstrap.js 前端配置

import axios from 'axios';
window.axios = axios;

window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';

import Echo from 'laravel-echo';
import Pusher from 'pusher-js';
window.Pusher = Pusher;

window.Echo = new Echo({
    broadcaster: 'pusher',
    key: import.meta.env.VITE_PUSHER_APP_KEY,
    cluster: import.meta.env.VITE_PUSHER_APP_CLUSTER ?? 'mt1',
    wsHost: import.meta.env.VITE_PUSHER_HOST ? import.meta.env.VITE_PUSHER_HOST : `ws-${import.meta.env.VITE_PUSHER_APP_CLUSTER}.pusher.com`,
    wsPort: import.meta.env.VITE_PUSHER_PORT ?? 80,
    wssPort: import.meta.env.VITE_PUSHER_PORT ?? 443,
    forceTLS: (import.meta.env.VITE_PUSHER_SCHEME ?? 'https') === 'https',
    enabledTransports: ['ws', 'wss'],
});

问题排查与解决步骤

1. 补充.env中的WebSocket环境变量

当前.env缺少本地WebSocket的关键配置,Laravel会默认走Pusher官方服务。添加以下内容到.env:

PUSHER_HOST=127.0.0.1
PUSHER_PORT=6001
PUSHER_SCHEME=http
# 同步前端VITE变量
VITE_PUSHER_HOST=127.0.0.1
VITE_PUSHER_PORT=6001
VITE_PUSHER_SCHEME=http

2. 修正broadcast.php的加密配置

使用http协议时,encrypted需设为false,同时改为读取env变量提升灵活性:

'options' => [
    'cluster' => env('PUSHER_APP_CLUSTER'),
    'host' => env('PUSHER_HOST', '127.0.0.1'),
    'port' => env('PUSHER_PORT', 6001),
    'scheme' => env('PUSHER_SCHEME', 'http'),
    'encrypted' => env('PUSHER_SCHEME', 'http') === 'https',
],

3. 重置缓存并重启WebSocket服务

执行以下命令确保配置生效:

php artisan config:clear
php artisan cache:clear
php artisan websockets:serve

4. 优化前端Echo配置

调整wsHost逻辑,优先使用本地配置而非cluster地址:

wsHost: import.meta.env.VITE_PUSHER_HOST || '127.0.0.1',
wsPort: import.meta.env.VITE_PUSHER_PORT || 6001,
wssPort: import.meta.env.VITE_PUSHER_PORT || 6001,
forceTLS: import.meta.env.VITE_PUSHER_SCHEME === 'https',

内容的提问来源于stack exchange,提问作者etranz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 09:35:59