Я создал шлюз API AWS WebSocket, который правильно работает при использовании для подключения чего-то вроде wscat или ws. Проблема в том, что их нельзя использовать из браузера. Кажется, что при использовании собственного JavaScript WebSocket приложение успешно подключается, а затем сразу же отключается с кодом состояния 1006 (соединение закрыто ненормально). Ни в браузере, ни в журналах CloudWatch нет никаких указаний на то, почему он внезапно отключается. Мне нужно, чтобы это соединение оставалось активным в браузере, но как собственный JavaScript, так и rxjs-websocket (который, я думаю, все еще использует это под капотом) немедленно отключаются.
Некоторые подробности по этому поводу: для аутентификации я проследил за этой веткой (используя заголовок Sec-WebSocket-Protocol), и, похоже, это удалось для подключения. Чего я не понимаю, так это почему он сразу же вызывает мой маршрут $disconnect после подключения. Маршрут $connect имеет тайм-аут 29000 мс, поэтому это не проблема тайм-аута.
Есть ли механизм поддержки активности, который мне нужно реализовать? Какие альтернативы на стороне клиента могут лучше подойти для этого? Я пытался повторно подключиться, пока соединение не останется открытым, но это тоже не работает. Возможно, я пропустил настройку самого шлюза?
Любая помощь будет принята с благодарностью.





Для тех, кто столкнется с этим в будущем: если вы используете заголовок Sec-WebSocket-Protocol для аутентификации (что и делает Kubernetes ), он не будет работать в Chrome, если ваш шлюз не ответит одним из тех же подпротоколов. Можно добавить свой протокол в лямбда-ответ $connect https://docs.aws.amazon.com/apigateway/latest/developerguide/websocket-connect-route-subprotocol.html, а затем при подключении вызвать его так:
const ws = new WebSocket(url, [subprotocol_to_respond_with, actual_token]);