Кто-нибудь использовал шлюз AWS WebSocket API и успешно подключился к машинописному приложению (Angular/React и т. д.)?

Я создал шлюз API AWS WebSocket, который правильно работает при использовании для подключения чего-то вроде wscat или ws. Проблема в том, что их нельзя использовать из браузера. Кажется, что при использовании собственного JavaScript WebSocket приложение успешно подключается, а затем сразу же отключается с кодом состояния 1006 (соединение закрыто ненормально). Ни в браузере, ни в журналах CloudWatch нет никаких указаний на то, почему он внезапно отключается. Мне нужно, чтобы это соединение оставалось активным в браузере, но как собственный JavaScript, так и rxjs-websocket (который, я думаю, все еще использует это под капотом) немедленно отключаются.

Некоторые подробности по этому поводу: для аутентификации я проследил за этой веткой (используя заголовок Sec-WebSocket-Protocol), и, похоже, это удалось для подключения. Чего я не понимаю, так это почему он сразу же вызывает мой маршрут $disconnect после подключения. Маршрут $connect имеет тайм-аут 29000 мс, поэтому это не проблема тайм-аута.

Есть ли механизм поддержки активности, который мне нужно реализовать? Какие альтернативы на стороне клиента могут лучше подойти для этого? Я пытался повторно подключиться, пока соединение не останется открытым, но это тоже не работает. Возможно, я пропустил настройку самого шлюза?

Любая помощь будет принята с благодарностью.

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
0
112
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для тех, кто столкнется с этим в будущем: если вы используете заголовок 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]);

Другие вопросы по теме