Успешный ответ Websocket $ connect не приводит к успеху на стороне клиента или браузера - PullRequest
0 голосов
/ 16 июня 2019

Я использую веб-сокеты через AWS API Gateway с Serverless Framework .

Я установил функцию обработчика соединения, которая проходит через пользовательский авторизатор (успешно) и возвращает объект как таковой, как в выражении обратного вызова, так и в операторе возврата, просто чтобы быть уверенным:

const result: APIGatewayProxyResult = {
    statusCode: OK,
    headers: {
      'Sec-WebSocket-Protocol': 'graphql-ws',
      'Content-Type': 'application/json',
      'Access-Control-Allow-Origin': '*'
    },
    body: 'Connected'
};

callback(null, result);

return result;

В журналах говорится, что все идет гладко, но по какой-то причине веб-розетка браузера не получает ответа (проверено в Google Chrome или Safari) и ошибок без сообщения. Затем он отключается (что, кажется, запускает обработчик $ disnect). Кажется, есть 3 x 101 перемещения веб-сокета от localhost, который не является удаленным wss: // url, который я нажимаю.

Для клиентского подключения через веб-сокет я использую subscription-transport-ws@0.9.16 от apollo (стандартные опции).

Каждый четвертый или пятый раз я вижу ошибку error during WebSocket handshake: Sent non-empty 'Sec-WebSocket-Protocol' header but no response was received в браузере.

Я отправляю некоторые заголовки запросов как таковые, но не уверен, что я собираюсь что-то сделать с ними на сервере:

Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Sec-WebSocket-Key: xxx
Sec-WebSocket-Protocol: graphql-ws
Sec-WebSocket-Version: 13
Upgrade: websocket

Любая помощь будет фантастической! Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 20 июня 2019

Как правило, ваш ответ обработчика событий WebSocket не отправляется обратно клиенту.Если вы хотите отправлять данные через WebSocket, вы делаете это асинхронно с помощью API Gateway Management API .

Если в вашем соединении произошел сбой и произошел неожиданный разрыв соединения, у вас есть ошибка либо в вашем пользовательском авторизаторе, либоваш websocket $connect обработчик маршрута.Если вы видите, что они выполняются в ваших журналах, успешно проверьте журнал шлюза API вашего API.Вам нужно включить это отдельно через API Gateway -> Ваш API -> Этапы -> Ваш этап -> Журналы / Трассировка.Все ошибки нижнего уровня в вашем сообщении находятся здесь.

0 голосов
/ 30 июня 2019

Я обнаружил, что subscriptions-transport-ws@0.9.16 вызывает проблемы. Я переключился на RxJS webSocket lib , и он отлично работает. Я предполагаю, что библиотека Apollo где-то добавляет заголовки. Возможно, будет лучший ответ, но пока это меня разобрало.

...