Соединение WebSocket никогда не устанавливается полностью, когда трафик c маршрутизируется через Cloudflare - PullRequest
0 голосов
/ 03 апреля 2020

Я использую сервис под названием glitch.me для размещения моего Node.js проекта, и они позволяют вам открыть только один порт внутри страны. На данный момент мой Node.js сервер может обрабатывать только HTTP-запросы, но glitch.me предоставляет мне трафик c, что позволяет клиенту косвенно обмениваться данными с использованием HTTPS. Мой проект в значительной степени опирается на использование WebSockets, и они отлично работают при прямом доступе к нему через example.glitch.me (URL-адрес, предоставленный glitch.me). Однако мне нужно подключить этот проект к моему пользовательскому домену (example.xyz), весь трафик c которого передается через Cloudflare. Однако при попытке установить sh соединение WebSocket через мой пользовательский домен (другими словами: через Cloudflare) соединение с сокетом никогда не устанавливается.

Теперь я понимаю, что это звучит очень точно c , но я думаю, что можно обобщить здесь:

Работа WebSockets:

  • client => glitch.me => мой бэкэнд
  • client => A => мой бэкэнд

Веб-сокеты не работают :

  • client => cloudflare => glitch.me => мой бэкэнд
  • client => A => B => мой бэкэнд

Примечание: HTTP / HTTPS по-прежнему работает для обоих доменов.

Я добавлял логирование на стороне сервера каждый раз, когда устанавливалось соединение через WebSocket, и, конечно же, сервер получает соединения! Однако клиент никогда не уведомляется, и в Chrome инструментах разработчика это показывает, что запрос никогда не завершается. Помните, что все работает отлично, когда трафик c не маршрутизируется через Cloudflare.

Я полностью понимаю, что для вас может оказаться невозможным решить мою проблему с помощью предоставленной вам информации, но Я не прошу вас сделать это. У меня вопрос просто такой: откуда проблема l ie? Ответ от моего бэкэнда застревает где-то по пути и не доходит до конца? Я связался и с glitch.me, и с Cloudflare, и они оба подтвердили, что они полностью поддерживают WebSocket traffi c.

Какая наиболее вероятная причина моей проблемы? Оттуда я, вероятно, смогу это исправить!

Редактировать: я использую пакет ws на npm на бэкэнде и стандартные JavaScript WebSockets на веб-интерфейсе.

...