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

Soketi+Laravel广播事件本地正常,外部无法实时通信求助

问题解答

必须配置WSS(安全WebSocket连接)

你遇到的外部网络通信异常,核心原因是现代浏览器和移动网络会严格限制非安全的WS(WebSocket)连接。当使用HTTP/WS时,外部网络(比如移动数据、非本地主机)的浏览器安全策略会直接阻止WS连接建立,这就是手机和外部主机无法接收消息的根本原因。只有切换到WSS(加密WebSocket),才能绕过这些限制,实现跨网络的实时通信。

用Cloudflare免费证书配置WSS的步骤

Cloudflare可以作为SSL终止点,不需要在Soketi本身配置证书,只需要通过Cloudflare的反向代理转发WebSocket请求即可,具体步骤如下:

1. 配置Cloudflare基础环境

  • 确保你的域名已托管在Cloudflare,DNS记录指向服务器IP,并且DNS记录的「云朵图标」处于开启状态(启用Cloudflare代理)。
  • 在Cloudflare的「SSL/TLS」设置中,将SSL模式设置为Full Strict(如果服务器本身还没有证书,可先选Flexible模式,后续再升级)。

2. 配置Cloudflare的WebSocket转发规则

通过Page Rules实现请求转发(免费版足够使用):

  • 进入Cloudflare的「Page Rules」页面,点击「Create Page Rule」。
  • 匹配URL:填写 你的域名/ws/*(比如 example.com/ws/*)。
  • 添加设置:
    • 开启「WebSocket Support」。
    • 设置「Forwarding URL」为 http://你的服务器IP:6001/$1($1 用于保留原请求的路径参数)。
    • 缓存级别设置为「Cache Level: Bypass」。
  • 保存规则并启用。

3. 修改Soketi的Docker Compose配置

添加跨域允许配置,确保只有你的域名能访问Soketi:

soketi:
    image: 'quay.io/soketi/soketi:latest-16-alpine'
    environment:
        SOKETI_DEBUG: '1'
        SOKETI_METRICS_SERVER_PORT: '9601'
        SOKETI_ALLOWED_ORIGINS: 'https://你的域名' # 替换为你的实际域名
        # 如果用数组管理应用,可添加此行(替换为你的应用信息)
        # SOKETI_APP_MANAGER_ARRAY: '[{"id":"你的APP_ID","key":"你的APP_KEY","secret":"你的APP_SECRET"}]'
    ports:
        - '${SOKETI_PORT:-6001}:6001'
        - '${SOKETI_METRICS_SERVER_PORT:-9601}:9601'

4. 调整Laravel广播配置

修改 config/broadcasting.php 的Pusher配置:

'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' => env('PUSHER_HOST') ?: '你的域名',
        'port' => env('PUSHER_PORT') ?: 443,
        'scheme' => env('PUSHER_SCHEME') ?: 'https',
        'encrypted' => true,
        'useTLS' => true,
    ],
],

修改 .env 文件:

PUSHER_SCHEME=https
PUSHER_HOST=你的域名
PUSHER_PORT=443
# Vite环境变量用VITE_前缀,Mix用MIX_,根据你的项目工具调整
VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
VITE_PUSHER_HOST="${PUSHER_HOST}"
VITE_PUSHER_PORT="${PUSHER_PORT}"
VITE_PUSHER_SCHEME="https"

5. 调整前端Echo配置(resources/js/bootstrap.js)

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, // Mix环境改为process.env.MIX_PUSHER_APP_KEY
    cluster: import.meta.env.VITE_PUSHER_APP_CLUSTER,
    wsHost: import.meta.env.VITE_PUSHER_HOST,
    wsPort: import.meta.env.VITE_PUSHER_PORT,
    wssPort: import.meta.env.VITE_PUSHER_PORT,
    forceTLS: true,
    encrypted: true,
    disableStats: true,
    enabledTransports: ['ws', 'wss'],
});

6. 重启服务验证

  • 重启Soketi容器:docker-compose up -d --force-recreate soketi
  • 重启Laravel应用(或队列广播服务,如果使用队列驱动)
  • 用HTTPS访问应用,测试移动数据、外部主机的实时通信是否正常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 09:33:18