Soketi服务连接报错(4001:App key不存在)求助及配置咨询
Soketi连接报错:App key不存在问题排查与解决
错误信息
code: 4001
message: "App key ---- does not exist."
event: "pusher:error"
现有配置信息
Soketi服务器配置
- 子域名:socket.example.com
- 安装命令:
apt install -y git python3 gcc build-essential npm install -g @soketi/soketi - Soketi配置文件
soketi.json:{ "debug": true, "port": 443, "appManager.array.apps": [ { "id": "---", "key": "---", "secret": "----" } ] } - Broadcast配置(服务器端):
'host' => env('PUSHER_HOST', '127.0.0.1'), 'port' => env('PUSHER_PORT', 6001), 'scheme' => env('PUSHER_SCHEME', 'http'), 'encrypted' => true, 'useTLS' => env('PUSHER_SCHEME') === 'https' - 服务器环境变量:
BROADCAST_DRIVER=pusher PUSHER_APP_ID=--- PUSHER_APP_KEY=--- PUSHER_APP_SECRET=--- PUSHER_APP_CLUSTER=ap2 PUSHER_SCHEME=https PUSHER_PORT=443 PUSHER_HOST=127.0.0.1 SOKETI_SSL_CERT=/etc/nginx/ssl/socket.example.com/----/server.crt SOKETI_SSL_KEY=/etc/nginx/ssl/socket.wourki.com/----/server.key - 启动命令:
soketi start --config=soketi.json
主项目(example.com)连接配置
- Broadcast配置:
'host' => env('PUSHER_HOST', '127.0.0.1'), 'port' => env('PUSHER_PORT', 6001), 'scheme' => env('PUSHER_SCHEME', 'http'), 'encrypted' => true, 'useTLS' => env('PUSHER_SCHEME') === 'https' - 项目环境变量:
BROADCAST_DRIVER=pusher PUSHER_APP_ID=--- PUSHER_APP_KEY=--- PUSHER_APP_SECRET=--- PUSHER_APP_CLUSTER=ap2 PUSHER_SCHEME=https PUSHER_PORT=443 PUSHER_HOST='socket.example.com' - Laravel Echo配置:
window.Echo = new Echo({ broadcaster: 'pusher', key: '----', cluster: 'ap2', forceTLS: true, wsHost:'socket.example.com', wsPort:6001, wssPort:443, encrypted: true, disableStats: true, enabledTransports: ['ws', 'wss'] });
排查与解决步骤
统一App Key配置
- 确保以下三处的App Key完全一致(无空格、大小写严格匹配):
- Soketi配置文件
soketi.json中appManager.array.apps[0].key - 主项目环境变量
PUSHER_APP_KEY - Laravel Echo配置中的
key字段
- Soketi配置文件
- 确保以下三处的App Key完全一致(无空格、大小写严格匹配):
修复SSL证书路径错误
- 服务器环境变量中
SOKETI_SSL_KEY的路径域名拼写错误(socket.wourki.com改为socket.example.com),修正后重启Soketi服务。
- 服务器环境变量中
调整Soketi监听地址
- 在
soketi.json中添加"host": "0.0.0.0",确保服务监听所有网卡,允许外部访问:{ "debug": true, "host": "0.0.0.0", "port": 443, "appManager.array.apps": [ { "id": "---", "key": "---", "secret": "----" } ] }
- 在
优化Echo连接配置
- 由于启用了HTTPS(
forceTLS: true),仅保留wss传输协议,避免端口混淆:window.Echo = new Echo({ broadcaster: 'pusher', key: '---', // 替换为正确的App Key cluster: 'ap2', forceTLS: true, wsHost:'socket.example.com', wssPort:443, encrypted: true, disableStats: true, enabledTransports: ['wss'] });
- 由于启用了HTTPS(
验证Soketi服务状态
- 启动Soketi后,查看控制台日志,确认已加载配置的App信息;
- 用curl测试服务可用性:
curl https://socket.example.com/apps - 预期返回包含配置的App ID和Key的JSON数据,说明服务正常运行。
入门教程推荐
- Laravel官方广播系统文档:重点学习Pusher驱动与WebSocket集成部分
- Soketi官方文档:Laravel集成章节,涵盖从安装到配置的完整流程
内容的提问来源于stack exchange,提问作者Mohammadjavad Rasti
相关产品推荐
相关产品推荐

