Portalite: Et letvægts Portal Go SDK med multi-relæ-binding og standard net.Listener-understøttelse

Ovenfor, i forbindelse med introduktionen af Portal, beskrev vi de problemer, der præger det moderne web. Med fremkomsten af AI-kodningsværktøjer kan enhver nu bygge et websted, men selve offentliggørelsen forbliver et område, der stadig er forbeholdt store platforme og skyinfrastruktur. Portal adskiller hosting af webben fra indholdsproduktion og forbinder individuelle lokale tjenester med hele verden via end-to-end-krypterede relæer, hvorved retten til at offentliggøre igen overgives til den enkelte.
Vi præsenterer Portalite
I dag præsenterer jeg Portalite. Portalite er en letvægts Portal-klient og Go SDK, bygget med minimale afhængigheder.
Hvis Portal repræsenterer filosofien om, "hvordan webben bør forandres", så er Portalite det tyndeste lim, der fastgør denne filosofi til udviklerens app. Udvikleren kan, uden komplekse skyindstillinger eller udrulningspipelines, importere SDK'en, tilføje nogle få linjer kode og dermed give sin app en portal-ingress. I det øjeblik appen kører, bliver en server, der tidligere kun eksisterede lokalt, til en offentlig tjeneste, der kan nås fra hvor som helst på internettet.
1. Offentlig Ingress, der klares med to linjer kode
Portalite understøtter Gos standardgrænseflade net.Listener. Det fungerer straks, blot ved at udskifte listeneren i en eksisterende webramme eller serverkode.
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)
- Nulkonfiguration (Zero-config): Der kræves ingen portvideresendelse, faste IP-adresser eller indgående firewallregler.
- Standardkompatibilitet: Fuldt kompatibel med
http.Server,grpc.Server, Gin, Echo, Chi og alle andre Go-biblioteker, der anvender en standardnet.Listener.
2. Kernefunktionen: Samtidig binding til flere relæer (Multi-Relay Binding)
De fleste tunnelværktøjer er afhængige af et enkelt endepunkt, hvorfor tjenesten også bryder sammen, når relæserveren går ned. Portalite arbejder ved samtidigt at være forbundet til flere relæservere.
- Driftsafbrydelsesfri fejlisolering (Failover): Selvom nogle af relæerne går ned eller oplever netværksforsinkelser, fortsætter de resterende aktive relæer med at videresende trafik gennem den samme virtuelle listener.
- Fjernelse af enkeltstående fejlpunkter (SPOF): Så længe ikke alle relæsessioner afbrydes samtidigt, standser applikationens
Accept()-løkke ikke. - End-to-end-kryptering (E2EE): Trafikken krypteres under videresendelsen, så relæserverne hverken kan se ind i eller manipulere med dataene.
- Automatisk genforbindelse og selvhelbredelse (Self-Healing): Selv ved midlertidige netværksafbrydelser eller genstart af et relæ genforhandler systemet sessioner og tokens i baggrunden og genetablerer forbindelsen automatisk.
3. Brug med en enkelt CLI-kommando
Hvis du ikke arbejder med Go-kode, eller hvis du har brug for en hurtig test, er det tilstrækkeligt at angive portnummeret i CLI'en.
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
Umiddelbart efter kommandoen udstedes URL'er til flere relæer, og tjenesten er straks tilgængelig udefra.
4. Letvægt med stærke funktioner
- Minimale afhængigheder: Ved at fjerne tredjepartsafhængigheder bliver det binære program lettere, og byggeprocessen går hurtigere.
- TLS- og UDP-understøttelse: Ud over TLS-trafik såsom HTTP/gRPC kan UDP-tjenester, for eksempel spilservere, nemt eksponeres via QUIC-datagram-backhaul.
Kom i gang
- GitHub-lager: https://github.com/gosuda/portalite
- Go-pakke:
go get gosuda.org/portalite