Обычная переадресация портов с вашего домашнего маршрутизатора должна работать нормально. Соединение socket.io - это соединение webSocket внизу, и соединение webSocket начинает работать как HTTP-запрос, а тот же исходный сокет затем «обновляется» до протокола webSocket. Таким образом, клиент делает HTTP-запрос на сервер, чтобы запустить весь процесс и установить исходное соединение.
Таким образом, любая конфигурация переадресации портов, которая будет работать для HTTP, должна работать на соединение socket.io.
Соединения Socket.io - это долгоживущие соединения (в отличие от TCP-соединений), поэтому вам также необходимо убедиться, что нет инфраструктуры, которая не позволит долгое время подключаться (прокси-серверы часто должны быть специально сконфигурированы для долговременных подключений webSocket), но это должно относиться к переадресации портов.
FYI, вам не нужно .listen()
для подключения Socket.io. Вы можете изменить это:
io = require("socket.io").listen(server);
к этому:
io = require("socket.io")(server);
В случае, если это не ясно, к вашему с портом forwrarding ...
Когда вы делаете порт переадресации на ваш домашний маршрутизатор, вы направляете входящие запросы на определенный порт на определенный компьютер и порт в своей домашней сети. Затем, когда вы хотите подключиться к Интернету, вы подключаетесь к общедоступному IP-адресу вашего маршрутизатора и порту, который вы настроили для перенаправления портов. Затем маршрутизатор использует правило переадресации портов, чтобы перенаправить любой входящий запрос на нужном порту на конкретный сервер в вашей локальной сети. Вы должны быть очень осторожны в этом, потому что, если вы совершаете ошибки или не имеете надлежащего обеспечения вашего приложения, это может открыть точку атаки, где люди в Интернете могут атаковать внутренние сети вашей домашней сети.
Обычно это не долгосрочная схема, и лучше заплатить хостинговой компании за запуск приложения. Затем вы также можете получить постоянный IP-адрес и можете настроить доменное имя для соответствия этому IP-адресу.
@AlexYates - Это ответ на ваш вопрос? – jfriend00