Вот быстрое вступление того, что я построил
NGROK Является ли фантастическим инструментом, который помогает разработчикам разоблачить их местное место в Интернет с минимальными усилиями. Однажды я собирался поделиться местный проект с клиентом, не развертывая его где-то. Но на этот раз мне нужно было разоблачить 2 порты : Один бегущий интерфейс и другая бэкэнда проекта, я обнаружил, что бесплатный план Ngrok позволяет только один туннель за раз. Позже в тот день я также узнал, что есть 40-запрос/минутный лимит .
БАМ! Идея. Что, если я построю альтернативу, а не заплатить 5 долларов США. Вот что делают разработчики, верно? У меня также была идея сделать это открытым источником.
Пришло время планировать. Очевидно, что 3 части:
- Разработчик с инструментом командной строки (CLI)
- прокси-сервер
- клиент с браузером.
Я был уверен, что должно было быть хотя бы эти шаги, чтобы сделать это работать:
- Разработчик подключается к серверу через CLI с номером порта:
JPRQ 8000.
- Сервер отвечает назначенный домен.
amazing-coder.jprq.live
- Клиент открывает домен в браузере:
https://amazing-coder.jprq.live.
- Сервер получает запрос и отправляет его на CLI.
- CLI делает запрос на localhost в данном порте и отправляет ответ на сервер.
- Сервер отвечает клиенту с ответом, который он получил от CLI.
Вот график, который поможет вам представить эти шаги.
CLI и сервер должны сделать обратно и вперед связи. Тщательно управляемые розетки TCP будут делать отличную работу, но займет много времени для реализации. Я решил использовать и использовал протокол WebStocket. Как вы можете знать, Websocket является протоколом хоп-хоп и к сожалению, моя альтернатива Ngrok теперь не может поддерживать опрос и потоковое http (потому что они никогда не заканчиваются или длится слишком долго).
Инструмент командной строки написан в Python и опубликован в Pypy. В настоящее время реализует командную строку в JavaScript для публикации в NPM только для удовольствия. И серверная сторона находится в Голанге. Я думаю, что это было лучшее решение выбрать Голанг из-за его простого обмена данными между Goroutines и узнал о утечке Goroutines трудно. Теперь у меня хорошее понимание утечек памяти из-за этого проекта.
Еще одна маленькая, но эффективная ошибка, которую я сделал во время реализации связи клиент-сервер, использовал JSON. Я понял это только после добавления функции для обработки файлов. С JSON можно только сериализировать строки. Чтобы повернуть содержимое файла, байты в строку, мне нужно было использовать64. Оказывается интенсивный процесс CPU. Лучше использовать BSON, я верю.
Проект является открытым источником и ожидает вашего вклада. Найдите некоторое время, чтобы посетить Repo GitHub в github.com/azimjohn/jprq.
Держите здание, ура.
Оригинал: “https://dev.to/azimjohn/how-i-built-ngrok-alternative-3n0g”