GoSuda

Portalite: lekki Portal Go SDK oparty na wielorelayowym wiązaniu i standardowym net.Listener

By Lemon Mint views ...

Wcześniej, przedstawiając Portal, poruszyliśmy problem współczesnej sieci. Wraz z pojawieniem się narzędzi do kodowania wspomaganego AI każdy może stworzyć stronę internetową, lecz samo jej udostępnienie światu nadal pozostaje domeną wielkich platform i chmur. Portal oddziela hostowanie w sieci od tworzenia treści i łączy lokalne usługi jednostki z całym światem za pośrednictwem szyfrowanego end-to-end przekaźnika, zwracając jednostkom prawo do udostępniania ich z powrotem w ich własne ręce.

Przedstawiamy Portalite

Dziś mam przyjemność zaprezentować Portalite. Portalite to ultralekki klient Portal oraz SDK dla Go, zbudowany z minimalną liczbą zależności.

Jeśli Portal jest filozofią tego, jak zmienić sieć, to Portalite jest najcieńszym spoiwem łączącym tę filozofię z aplikacjami deweloperów. Deweloper nie potrzebuje skomplikowanej konfiguracji chmury ani potoku wdrożeniowego: wystarczy zaimportować SDK i dodać kilka linijek kodu, aby umieścić portalowy ingress w swojej aplikacji. Gdy aplikacja zostaje uruchomiona, serwer, który dotąd żył wyłącznie lokalnie, staje się publicznie dostępną usługą, osiągalną z dowolnego miejsca w Internecie.

1. Publiczny Ingress gotowy w dwóch linijkach kodu

Portalite obsługuje net.Listener, standardowy interfejs Go. Wystarczy zastąpić listener w istniejącym frameworku webowym lub kodzie serwera, aby rozwiązanie zadziałało natychmiast.

1identity, err := portalite.GenerateIdentity("my-service")
2
3listener, err := portalite.Expose(ctx, portalite.ExposeConfig{
4    Relays:   portalite.DefaultRelays(),
5    Identity: identity,
6})
7
8http.Serve(listener, handler)
  • Zero-config: nie są wymagane żadne przekierowania portów, stałe adresy IP ani reguły przychodzące zapory sieciowej.
  • Zgodność ze standardem: w pełni kompatybilny z http.Server, grpc.Server, Gin, Echo, Chi oraz każdą biblioteką Go korzystającą ze standardowego net.Listener.

2. Kluczowa cecha: jednoczesne wiązanie z wieloma przekaźnikami (Multi-Relay Binding)

Większość narzędzi tunelujących opiera się na pojedynczym punkcie końcowym, dlatego awaria serwera przekaźnikowego powoduje również przerwanie usługi. Portalite działa, łącząc się jednocześnie z wieloma serwerami przekaźnikowymi.

  • Bezprzerwowa izolacja awarii (Failover): jeśli część przekaźników przestanie działać lub wystąpią opóźnienia sieciowe, pozostałe aktywne przekaźniki nadal przesyłają ruch do tego samego wirtualnego listenera.
  • Eliminacja pojedynczego punktu awarii (SPOF): dopóki wszystkie sesje przekaźników nie zostaną jednocześnie przerwane, pętla Accept() aplikacji nie zostaje zatrzymana.
  • Szyfrowanie end-to-end (E2EE): ruch jest szyfrowany podczas przekazywania, więc serwery przekaźnikowe nie mogą odczytać ani zmodyfikować danych.
  • Automatyczne ponowne połączenie i samonaprawa (Self-Healing): nawet w przypadku chwilowego zerwania sieci lub ponownego uruchomienia przekaźnika, sesje i tokeny są automatycznie renegocjowane w tle, co przywraca połączenie.

3. Natychmiastowe użycie jednym poleceniem CLI

Jeśli nie tworzysz kodu w Go lub potrzebujesz szybkiego testu, wystarczy przekazać numer portu do CLI.

1$ go install gosuda.org/portalite/cmd/portalite@latest && portalite expose --name "my-service" 3000
2URL https://my-service.rly.best
3URL https://my-service.s-h.day
4

Natychmiast po uruchomieniu polecenia zostają wygenerowane adresy URL z wieloma przekaźnikami i usługa staje się dostępna z zewnątrz.

4. Lekkość i potężne funkcje

  • Minimalna liczba zależności: dzięki ograniczeniu zewnętrznych zależności plik binarny jest lekki, a kompilacja szybka.
  • Obsługa TLS i UDP: oprócz ruchu TLS, takiego jak HTTP/gRPC, można także łatwo udostępniać usługi UDP, na przykład serwery gier, za pośrednictwem tunelowania datagramów QUIC.

Rozpoczęcie pracy