Как работает localtunnel под капотом? - PullRequest
0 голосов
/ 06 ноября 2018

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

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

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

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

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

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

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

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

1 Ответ

0 голосов
/ 07 ноября 2018

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

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

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

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

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

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

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

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

...