我正在使用Docker for soketi,当事件被调度时,我可以在soketi docker日志中看到日志,但我在使用Laravel Echo的浏览器上遇到了连接超时问题。以下是我当前的设置:
# docker-compose.yml
soketi:
image: 'quay.io/soketi/soketi:latest-16-alpine'
environment:
SOKETI_DEBUG: "${SOKETI_DEBUG-1}"
SOKETI_METRICS_SERVER_PORT: "9601"
SOKETI_METRICS_ENABLED: "${SOKETI_METRICS_ENABLED-1}"
ports:
- "6001:6001"
- "9601:9601"
# .env
BROADCAST_DRIVER=pusher
PUSHER_HOST=host.docker.internal
PUSHER_PORT=6001
PUSHER_APP_ID=app-id
PUSHER_APP_KEY=app-key
PUSHER_APP_SECRET=app-secret
PUSHER_SCHEME=http
SOKETI_DEBUG=1
#broadcasting.php
'pusher' => [
'driver' => 'pusher',
'key' => env('PUSHER_APP_KEY'),
'secret' => env('PUSHER_APP_SECRET'),
'app_id' => env('PUSHER_APP_ID'),
'options' => [
'host' => env('PUSHER_HOST', '127.0.0.1'),
'port' => env('PUSHER_PORT', 6001),
'scheme' => env('PUSHER_SCHEME', 'http'),
'encrypted' => true,
'useTLS' => env('PUSHER_SCHEME', 'http') === 'https',
],
],
我可以看到127.0.0.1:6001
返回的ok
const echo = new Echo({
broadcaster: 'pusher',
key: 'app-key',
wsHost: '127.0.0.1',
wsPort: 6001,
wssPort: 6001,
forceTLS: false,
encrypted: true,
disableStats: true,
enabledTransports: ['ws', 'wss'],
});
const channel = echo.channel('my-channel');
channel.listen('.user.login', (e: unknown) => {
console.log('🚀 ~ file: index.vue:29 ~ channel.listen ~ e:', e);
});
和我得到
index.vue:26 WebSocket连接到“wss://127.0.0.1:6001/app/app-key?protocol=7&client=js&version=7.6.0&flash=false'失败:WebSocket在连接建立之前关闭`
我使用“Laravel-Echo”:“1.15.2”和“pusher-js”:“7.6.0”,.我不得不降级推最新到7.6作为8.0他们增加了集群作为一个强制性的选项.
知道吗?先谢谢你了
将laravel echo和pusher降级到不同的版本以及soketi,但没有运气
2条答案
按热度按时间i5desfxk1#
所以我解决了这个问题,这是因为我使用了反向代理(https),它强制连接是wss而不是ws。因此,我把soketi服务器放在反向代理后面,并将
forceTLS
设置为true,它可以按预期工作。h7wcgrx32#
我用另一种方式解决了这个问题。它也是在SOF的帮助下找到的,但我现在找不到链接。解决方案只是为了本地开发,将主机更改为本地IP之一。是
现在
在当地,它工作得很理想。