Portalite: En lettvekts Portal Go SDK med multirelébinding og standard net.Listener-grensesnitt

Tidligere, da vi introduserte Portal, tok vi opp problemene med dagens nett. Fremveksten av AI-baserte kodeverktøy har gjort det mulig for hvem som helst å lage et nettsted, men selve det å gjøre det offentlig tilgjengelig forblir fortsatt et enerett for store plattformer og skytjenester. Portal skiller vertstjenester fra innholdsproduksjon og kobler lokale tjenester fra enkeltpersoner til hele verden via en ende-til-ende-kryptert relé, og gir dermed tilbake retten til å gjøre noe offentlig til den enkelte.
Vi presenterer Portalite
I dag presenterer jeg Portalite. Portalite er en ultralett Portal-klient og Go SDK bygget med minimale avhengigheter.
Dersom Portal representerer filosofien om "hvordan nettet bør endres", er Portalite det tynneste limet som fester denne filosofien til utviklerens applikasjon. Utviklere trenger ingen komplekse skyoppsett eller distribusjonsrørledninger; de importerer SDK-en, legger til noen få linjer med kode, og har dermed en portal-ingress i sin applikasjon. I det øyeblikket applikasjonen kjører, blir en server som tidligere bare fantes lokalt, en offentlig tjeneste som kan nås fra hvor som helst på internett.
1. Offentlig ingress som avsluttes med to linjer kode
Portalite støtter net.Listener, Gos standardgrensesnitt. Det fungerer umiddelbart ved at man bytter ut lytteren i en eksisterende webrammeverks- 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)
- Null konfigurasjon (Zero-config): Ingen portvideresending, faste IP-adresser eller innadgående regler i brannmuren er nødvendig.
- Standardkompatibilitet: Fullt kompatibel med
http.Server,grpc.Server, Gin, Echo, Chi og alle andre Go-biblioteker som bruker standardnet.Listener.
2. Kjerneegenskap: Samtidig binding til flere reléer (Multi-Relay Binding)
De fleste tunnelverktøy er avhengige av ett enkelt endepunkt, slik at tjenesten også faller bort når relé-serveren stopper. Portalite opererer ved å være samtidig tilkoblet flere relé-servere.
- Driftsavbruddsfri feilisolering (Failover): Selv om noen av flere reléer går ned eller opplever nettverksforsinkelse, fortsetter de gjenværende aktive reléene å lede trafikk inn gjennom samme virtuelle lytter.
- Eliminering av enkeltpunkt for feil (SPOF): Så lenge ikke alle reléøkter brytes samtidig, avbrytes ikke applikasjonens
Accept()-løkke. - Ende-til-ende-kryptering (E2EE): Trafikken krypteres under videresending, slik at relé-serveren verken kan se inn i eller endre dataene.
- Automatisk gjenoppkobling og selvhelbredning (Self-Healing): Også ved midlertidige nettverksbrudd eller omstart av et relé gjenforhandles økter og tokener automatisk i bakgrunnen, og forbindelsen gjenopprettes.
3. Umiddelbar bruk med én CLI-kommando
Dersom du ikke arbeider med Go-kode, eller trenger en rask test, sender du bare portnummeret til CLI-et.
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 etter at kommandoen kjøres, utstedes URL-er for flere reléer, og tjenesten er straks tilgjengelig eksternt.
4. Lett, men kraftfull funksjonalitet
- Minimale avhengigheter: Ved å fjerne tredjepartsavhengigheter er binæren lett og byggingen rask.
- Støtte for TLS og UDP: Ikke bare TLS-trafikk som HTTP/gRPC, men også UDP-tjenester som spillservere kan enkelt eksponeres via QUIC-datagram-backhaul.
Komme i gang
- GitHub-repositorium: https://github.com/gosuda/portalite
- Go-pakke:
go get gosuda.org/portalite