Portalite: un SDK Go leggero per Portal basato su binding multi-relay e su net.Listener standard

In precedenza, presentando Portal, abbiamo parlato dei problemi del web moderno. Con l'avvento degli strumenti di codifica basati sull'IA, chiunque può creare un sito web, ma la sua pubblicazione nel mondo rimane ancora un'area di esclusiva competenza delle grandi piattaforme e del cloud. Portal separa l'hosting del web dalla produzione dei contenuti e collega i servizi locali delle persone in tutto il mondo tramite relay con crittografia end-to-end, restituendo così alle persone il potere di pubblicare.
Presentiamo Portalite
Oggi presento Portalite. Portalite è un client Portal ultraleggero e un SDK Go realizzati con dipendenze minime.
Se Portal rappresenta la filosofia di "come cambiare il web", Portalite è il collante più sottile che applica tale filosofia alle app degli sviluppatori. Gli sviluppatori possono inserire un ingress Portal nella propria app senza configurazioni cloud complesse né pipeline di distribuzione: basta importare l'SDK e aggiungere poche righe di codice. Nel momento in cui l'app viene eseguita, il server che viveva solo in locale diventa un servizio pubblico accessibile da qualsiasi parte di Internet.
1. Un ingress pubblico completato con due righe di codice
Portalite supporta net.Listener, l'interfaccia standard di Go. È sufficiente sostituire il listener nel codice del framework web o del server esistente per farlo funzionare immediatamente.
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: non è richiesta alcuna configurazione di port forwarding, IP fisso o regole di ingresso del firewall.
- Compatibilità standard: è completamente compatibile con
http.Server,grpc.Server, Gin, Echo, Chi e con tutte le librerie Go che utilizzano ilnet.Listenerstandard.
2. Il punto chiave: binding simultaneo multi-relay (Multi-Relay Binding)
La maggior parte degli strumenti di tunneling dipende da un unico endpoint, pertanto, se il server relay si arresta, anche il servizio si interrompe. Portalite opera connettendosi simultaneamente a più server relay.
- Isolamento dei guasti senza interruzioni (Failover): anche se alcuni relay si guastano o subiscono ritardi di rete, i relay rimanenti continuano a ricevere il traffico attraverso lo stesso listener virtuale.
- Eliminazione del single point of failure (SPOF): finché non si interrompono contemporaneamente tutte le sessioni relay, il ciclo
Accept()dell'applicazione non viene interrotto. - Crittografia end-to-end (E2EE): il traffico viene trasmesso crittografato, pertanto i server relay non possono né ispezionare né manipolare i dati.
- Riconnessione automatica e autoriparazione (Self-Healing): anche in caso di interruzioni di rete temporanee o riavvii dei relay, sessioni e token vengono rinegoziati automaticamente in background per ripristinare la connessione.
3. Utilizzo immediato con un solo comando CLI
Se non si utilizza codice Go o si necessita di un test rapido, è sufficiente passare il numero di porta alla 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
Subito dopo l'esecuzione del comando vengono emessi URL multi-relay, che diventano immediatamente accessibili dall'esterno.
4. Funzionalità leggere ma potenti
- Dipendenze minime: eliminando le dipendenze di terze parti, il binario è leggero e la compilazione è rapida.
- Supporto TLS e UDP: oltre al traffico TLS come HTTP/gRPC, è possibile esporre con facilità anche servizi UDP, come i server di gioco, tramite il backhaul di datagrammi QUIC.
Per iniziare
- Repository GitHub: https://github.com/gosuda/portalite
- Pacchetto Go:
go get gosuda.org/portalite