Привет. Я пытаюсь создать такое соединение: socket.io-client -> AWS Gateway API.
При попытке подключиться от клиента socket.io к API AWS Gateway соединение не может быть установлено.
Он застревает со статусом «101 протокол переключения» на несколько секунд, затем генерирует событие «отключено» и пытается восстановить соединение, и процесс повторяется бесконечно.
Однако этого не происходит с собственными WebSockets или библиотекой ws, все подключается так, как должно.
Я думаю, что проблема как-то связана с тем, как стороны клиента и сервера socket.io взаимодействуют друг с другом, обмениваясь определенными сообщениями, которые могут не генерироваться на стороне AWS.
Итак, мой вопрос: возможно ли установить такое соединение без использования прокси:
socket.io-client -> AWS Api Gateway -> socket.io(node.js)
,
или всегда должно быть Socket.io-client -> socket.io(node.js)
?
Для настройки шлюза использовалась документация Amazon AWS: https://aws.amazon.com/blogs/compute/announcing-websocket-apis-in-amazon-api-gateway/
Он использует стандартные маршруты $ connect, $ disconnect и $ default, но вместо lambda используется его серверная часть nodejs. Но проблема только на стороне клиента.
@Sairyss есть ли обновления по этому
@Sairyss есть ли обновления по этому
@JerryLeeCS В итоге я использовал собственные WebSockets на стороне клиента и маршруты $ connect, $ disconnect и $ default на стороне сервера. Я не нашел решения, чтобы заставить его работать с Socket.io. Похоже, что соединения Socket.io из внешнего интерфейса не поддерживаются AWS Gateway API, он просто отказывается подключаться.
Кажется, это возможно: https://stackoverflow.com/a/56364967
@darrachequesne Если я прочитал эту ссылку / правильно опубликуйте, он использует сервер EC2, на котором работает сервер SocketIO? Немного непонятно. Я в той же лодке - ws
работает нормально, но не сокет io - соединение вообще отсутствует. Использование сервера websocket по умолчанию, предоставляемого шлюзом aws api (без сервера).
Самый полезный комментарий
@JerryLeeCS В итоге я использовал собственные WebSockets на стороне клиента и маршруты $ connect, $ disconnect и $ default на стороне сервера. Я не нашел решения, чтобы заставить его работать с Socket.io. Похоже, что соединения Socket.io из внешнего интерфейса не поддерживаются AWS Gateway API, он просто отказывается подключаться.