Laravel Echo+Pusher在Heroku生产环境无法发送实时消息求助
实时聊天应用Heroku部署后Pusher无法发送消息问题
使用Pusher和Laravel Echo构建的实时聊天应用,本地运行正常,但部署到Heroku生产环境后,Pusher无报错、浏览器控制台无异常,却无法发送消息。本地仅添加wsHost配置到Echo对象时会出现异常,相关配置如下:
Bootstrap.js配置
window.Echo = new Echo({ broadcaster: 'pusher', key: import.meta.env.VITE_PUSHER_APP_KEY, cluster: import.meta.env.VITE_PUSHER_APP_CLUSTER ?? 'sa1', 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'], });
broadcasting.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'), 'port' => env('PUSHER_PORT', 443), 'scheme' => env('PUSHER_SCHEME', 'https'), 'encrypted' => true, 'useTLS' => env('PUSHER_SCHEME', 'https') === 'https', ], 'client_options' => [ // Guzzle client options: https://docs.guzzlephp.org/en/stable/request-options.html ], ],
广播事件SendPrivate代码
class SendPrivate implements ShouldBroadcast { use Dispatchable, InteractsWithSockets, SerializesModels; private $mensagem; private $user; public function __construct($mensagem , User $user) { $this->mensagem = $mensagem; $this->user = $user; } public function broadcastOn(): array { return [ new PrivateChannel('User.'. $this->user->id) ]; } public function broadcastWith() { return [ 'mensagem' => $this->mensagem, ]; } }
Vue监听代码
Echo.private('User.' + idLogado.value).listen('SendPrivate', (e) => { messages.value.push(e.mensagem); scrollBottom(); });
Heroku环境变量
VITE_PUSHER_APP_KEY= ******** VITE_PUSHER_APP_CLUSTER = mt1 VITE_PUSHER_HOST = ws-mt1.pusher.com VITE_PUSHER_PORT = 443 VITE_PUSHER_SCHEME = https
Pusher环境变量
PUSHER_APP_KEY= ******** PUSHER_APP_SECRET= ******** PUSHER_APP_CLUSTER = mt1 PUSHER_HOST = ws-mt1.pusher.com PUSHER_PORT = 443 PUSHER_SCHEME = https
已尝试的排查操作:
- 修改Pusher集群配置
- 添加/移除Echo的host配置
- 本地需启动队列
php artisan queue:work database --daemon --tries=5才能运行,Heroku已配置worker进程worker php artisan queue:listen
以上操作均未解决问题,且控制台无任何错误提示。
内容的提问来源于stack exchange,提问作者samuel souza
相关产品推荐
相关产品推荐

