Как localtunnel работает под капотом?

Я использую localtunnel уже довольно давно, и теперь мне интересно, как это работает внутри. Вот я прочитал одну статью, в которой объясняется то же самое.

Вот несколько терминов, которые я не понимаю из приведенной выше статьи:

сервер localtunnel запускает новый TCP-сервер на случайно сгенерированном порту больше 1023

Как можно запустить другой сервер внутри сервера?

Если клиент localtunnel может подключиться к случайно сгенерированному TCP-порту сервера localtunnel, по умолчанию он открывает 10 сокетов TCP для сервера.

Какова цель открытия TCP-сокетов с сервером, когда клиент может подключиться к серверу, нажав определенный URL-адрес, когда это необходимо?

Я также пытался прочитать код из его репозитория Github, но он слишком сложен, чтобы понять основную концепцию. , так как я новичок в Nodejs и его фреймворках.

Любое базовое объяснение поможет!


person Kaushal28    schedule 06.11.2018    source источник
comment
вы ищете альтернативный ответ или лучшее разъяснение? @Kaushal28   -  person mihai    schedule 23.11.2018
comment
Я ищу легко понять разъяснения. Я прочитал ваш ответ, но, поскольку я новичок в сети, не понял его ясно.   -  person Kaushal28    schedule 27.11.2018


Ответы (1)


Вот схема всех служб, задействованных в localtunnel, сгруппированных по узлам.

       localhost:             [localtunnel client]  --- [HTTP client] --- [your server]
                               |                |  
                               |                | 
localtunnel host:      [express server] --- [TCP server]
                                                    |
                                                    |
   internet user:                                 [app]

По сути, когда вы набираете lt --port 8000 в консоли, запускается клиент localtunnel. Он подключается к экспресс-серверу, расположенному в облаке. Этот экспресс-сервер возвращает вам адрес, по которому должно подключаться ваше приложение. Затем он запускает сервер TCP, который прослушивает соединения из вашего приложения. Сервер TCP также открывает 10 сокетов с клиентом localtunnel для отправки данных. Когда из приложения приходит соединение, tcp-сервер отправляет данные клиенту localtunnel на один из 10 сокетов. Затем данные передаются локальному http-клиенту, который отправляет запрос на ваш сервер.

Чтобы ответить на ваши вопросы:

Как можно запустить другой сервер на сервере?

Сервер node.js может запускать другие процессы с помощью child_process.

Какова цель открытия сокетов TCP с сервером, когда клиент может подключиться к серверу, нажав определенный URL-адрес, когда это необходимо?

Здесь вы путаете клиент localtunnel с интернет-клиентом (приложение на моей диаграмме). Сервер TCP должен поддерживать 2 соединения: одно с внешним миром (приложение) и одно с клиентом localtunnel. 10 сокетов, упомянутых в статье, представляют собой соединение с клиентом localtunnel и используются для отправки данных.

person mihai    schedule 06.11.2018
comment
Я вот этого не понимаю: The data is then piped to a local http client that issues the request to your server. Как именно это возможно? - person Kaushal28; 01.12.2018