GoSuda

Portalite: Ett lättviktigt Portal Go SDK med multi-relay-bindning och standardgränssnittet net.Listener

By Lemon Mint views ...

Tidigare, när vi introducerade Portal, talade vi om problemen med det moderna webben. Med framväxten av AI-kodverktyg kan vem som helst nu skapa en webbplats, men att faktiskt publicera den för världen förblir ett område som domineras av stora plattformar och molntjänster. Portal separerar webbens hosting från innehållsskapandet och ansluter, genom ett ände-till-ände-krypterat relänät, lokala tjänster hos enskilda individer till hela världen, och återlämnar därmed rätten att publicera till individen.

Vi presenterar Portalite

I dag presenterar jag Portalite. Portalite är en ultralätt Portal-klient och Go SDK byggd med minimala beroenden.

Om Portal är filosofin om hur webben kan förändras, så är Portalite det tunnaste lim som fäster den filosofin vid utvecklarens app. Utvecklaren behöver inga komplexa molninställningar eller distributionspipelines; genom att importera SDK:t och lägga till några rader kod kan man ge sin app en portal-ingress. Så snart appen körs förvandlas servern, som tidigare endast fanns lokalt, till en publik tjänst som kan nås var som helst på internet.

1. Publik Ingress som klarar sig med två rader kod

Portalite stöder net.Listener, Gos standardgränssnitt. Det fungerar omedelbart när man ersätter listenern i en befintlig webbramverks- eller serverkod.

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)
  • Noll konfiguration (Zero-config): Portforwarding, fasta IP-adresser och inkommande brandväggsregler krävs överhuvudtaget inte.
  • Standardkompatibilitet: Fullt kompatibel med http.Server, grpc.Server, Gin, Echo, Chi och alla andra Go-bibliotek som använder standardmässiga net.Listener.

2. Kärnan: Samtidig bindning till flera reläer (Multi-Relay Binding)

De flesta tunnelverktyg förlitar sig på en enda slutpunkt, så när reläservern går ner avbryts även tjänsten. Portalite är anslutet till och arbetar med flera reläservrar samtidigt.

  • Avbrottsfri felisolering (Failover): Även om någon av flera reläer går ner eller drabbas av nätverksfördröjning fortsätter de återstående aktiva reläerna att ta emot trafik via samma virtuella listener.
  • Eliminering av enskilda felpunkter (SPOF): Så länge inte alla reläsessioner bryts samtidigt avbryts inte applikationens Accept()-loop.
  • Ände-till-ände-kryptering (E2EE): Trafiken förmedlas krypterad, vilket innebär att reläservrarna varken kan se in i eller manipulera datan.
  • Automatisk återanslutning och självläkning (Self-Healing): Även vid tillfälliga nätverksavbrott eller omstart av reläer återupprättas anslutningen genom att sessioner och tokens automatiskt förhandlas om i bakgrunden.

3. Omedelbar användning med ett CLI-kommando

Om du inte arbetar med Go-kod eller behöver snabbt testa något kan du använda CLI och endast ange portnumret.

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

Så snart kommandot körs utfärdas webbadresser för flera reläer, och tjänsten är omedelbart åtkomlig utifrån.

4. Lätt men kraftfullt

  • Minimala beroenden: Genom att minimera tredjepartsberoenden blir binären lätt och bygget snabbt.
  • Stöd för TLS och UDP: Förutom TLS-trafik såsom HTTP/gRPC kan UDP-tjänster, till exempel spelservrar, enkelt exponeras via QUIC-datagram-backhaul.

Komma igång