GoSuda

Portalite: een lichtgewicht Portal Go SDK met multi-relaybinding en een standaard net.Listener-implementatie

By Lemon Mint views ...

Eerder, bij de introductie van Portal, hebben we het over het probleem van het moderne web gehad. Met de opkomst van AI-coderingstools kan iedereen nu een website maken, maar het publiekelijk beschikbaar stellen daarvan blijft nog steeds een domein van grote platforms en de cloud. Portal scheidt het hosten van het web van de creatie van inhoud en verbindt lokale diensten van individuen via end-to-end versleutelde relays met de hele wereld, waardoor het recht om iets openbaar te maken weer bij het individu terechtkomt.

Wij presenteren Portalite

Vandaag presenteer ik Portalite. Portalite is een ultralichte Portal-client en Go SDK, gebouwd met minimale afhankelijkheden.

Als Portal de filosofie is van "hoe het web te veranderen", dan is Portalite de dunste lijm die die filosofie aan de applicaties van ontwikkelaars bevestigt. Ontwikkelaars kunnen zonder complexe cloudconfiguratie of deploymentpijplijnen een portal-ingress aan hun applicatie toevoegen door de SDK te importeren en slechts enkele regels code toe te voegen. Zodra de applicatie draait, wordt een server die alleen lokaal bereikbaar was een publieke dienst die vanaf overal op internet toegankelijk is.

1. Een publieke Ingress die met twee regels code klaar is

Portalite ondersteunt net.Listener, de standaardinterface van Go. Door alleen de listener van een bestaand webframework of servercode te vervangen, werkt het onmiddellijk.

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: Poortdoorschakeling, vaste IP-adressen en inkomende firewallregels zijn helemaal niet nodig.
  • Standaardcompatibiliteit: Volledig compatibel met http.Server, grpc.Server, Gin, Echo, Chi en alle andere Go-bibliotheken die een standaard net.Listener gebruiken.

2. Kern: gelijktijdige binding aan meerdere relays (Multi-Relay Binding)

De meeste tunnelingtools zijn afhankelijk van één enkel eindpunt, waardoor de service ook uitvalt wanneer de relayserver uitvalt. Portalite werkt door tegelijkertijd verbinding te maken met meerdere relayservers.

  • Storingsisolatie zonder onderbreking (Failover): Ook wanneer enkele van de meerdere relays uitvallen of netwerkvertraging optreedt, blijven de overige actieve relays via dezelfde virtuele listener verkeer ontvangen.
  • Eliminatie van het single point of failure (SPOF): Zolang niet alle relaysessies tegelijkertijd wegvallen, wordt de Accept()-lus van de applicatie niet onderbroken.
  • End-to-end-versleuteling (E2EE): Het verkeer wordt versleuteld doorgegeven, zodat relayservers de gegevens niet kunnen inzien of manipuleren.
  • Automatische herverbinding en zelfherstel (Self-Healing): Ook bij tijdelijke netwerkonderbrekingen of het herstarten van een relay onderhandelt de achtergrond automatisch opnieuw over sessies en tokens om de verbinding te herstellen.

3. Direct gebruik met één CLI-opdracht

Als je geen Go-code gebruikt of een snelle test nodig hebt, geef je via de CLI alleen het poortnummer op.

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

Direct na het uitvoeren van de opdracht worden meerdere relay-URL's uitgegeven, en is de service meteen van buitenaf bereikbaar.

4. Licht maar krachtig

  • Minimale afhankelijkheden: Doordat third-party afhankelijkheden zijn verwijderd, is de binary licht en is de build snel.
  • TLS- en UDP-ondersteuning: Naast TLS-verkeer zoals HTTP/gRPC kunnen ook UDP-diensten, zoals gameservers, eenvoudig worden blootgesteld via QUIC-datagram-backhaul.

Aan de slag