Portalite: Ein leichtgewichtiges Portal-Go-SDK mit Multi-Relay-Bindung und standardkonformem net.Listener

Zuvor, als wir Portal vorstellten, sprachen wir über die Probleme des modernen Webs. Mit dem Aufkommen von KI-gestützten Programmierwerkzeugen kann zwar jeder eine Website erstellen, doch deren Veröffentlichung bleibt nach wie vor das exklusive Terrain großer Plattformen und Cloud-Anbieter. Portal trennt das Hosting des Webs von der Inhaltserstellung und verbindet lokale Dienste einzelner Personen über eine Ende-zu-Ende-verschlüsselte Relaisstruktur mit der ganzen Welt. Auf diese Weise wird das Recht zur Veröffentlichung wieder den Einzelnen übertragen.
Wir stellen Portalite vor
Heute stelle ich Portalite vor. Portalite ist ein ultraleichter Portal-Client und Go-SDK, das mit minimalen Abhängigkeiten entwickelt wurde.
Während Portal die Philosophie verkörpert, wie sich das Web verändern kann, ist Portalite der dünnste Klebstoff, der diese Philosophie in die Anwendungen von Entwicklern einbringt. Entwickler müssen weder komplexe Cloud-Konfigurationen noch Bereitstellungspipelines einrichten. Es genügt, das SDK zu importieren und wenige Zeilen Code hinzuzufügen, um ein Portal-Ingress in die eigene Anwendung zu integrieren. Sobald die Anwendung läuft, wird ein Server, der bisher nur lokal erreichbar war, zu einem öffentlichen Dienst, der aus dem gesamten Internet zugänglich ist.
1. Öffentlicher Ingress mit nur zwei Codezeilen
Portalite unterstützt die Go-Standardschnittstelle net.Listener. Es genügt, den Listener bestehender Web-Frameworks oder Servercode auszutauschen, und die Anwendung funktioniert sofort.
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: Portweiterleitung, feste IP-Adressen und eingehende Firewall-Regeln sind vollständig überflüssig.
- Standardkompatibilität: Vollständig kompatibel mit
http.Server,grpc.Server, Gin, Echo, Chi und allen anderen Go-Bibliotheken, die den Standard-net.Listenerverwenden.
2. Kernfunktion: Gleichzeitige Bindung an mehrere Relais (Multi-Relay Binding)
Die meisten Tunnelwerkzeuge sind auf einen einzigen Endpunkt angewiesen, sodass der Dienst mit dem Ausfall des Relaisservers ebenfalls unterbrochen wird. Portalite arbeitet, indem es gleichzeitig mit mehreren Relais-Servern verbunden ist.
- Unterbrechungsfreie Fehlerisolierung (Failover): Fallen einzelne Relais aus oder treten Netzwerkverzögerungen auf, nehmen die verbleibenden funktionsfähigen Relais den Datenverkehr weiterhin über denselben virtuellen Listener entgegen.
- Beseitigung des Single Point of Failure (SPOF): Solange nicht alle Relais-Sitzungen gleichzeitig abbrechen, wird die
Accept()-Schleife der Anwendung nicht unterbrochen. - Ende-zu-Ende-Verschlüsselung (E2EE): Der Datenverkehr wird verschlüsselt weitergeleitet, sodass Relais-Server die Daten weder einsehen noch manipulieren können.
- Automatische Wiederverbindung und Selbstheilung (Self-Healing): Auch bei vorübergehenden Netzwerkunterbrechungen oder einem Neustart des Relais werden Sitzungen und Token im Hintergrund automatisch neu ausgehandelt und die Verbindung wiederhergestellt.
3. Sofort einsatzbereit mit einer CLI-Zeile
Wenn kein Go-Code verwendet wird oder ein schneller Test benötigt wird, genügt es, der CLI lediglich die Portnummer zu übergeben.
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
Unmittelbar nach der Ausführung des Befehls werden URLs mehrerer Relais ausgegeben, und der Dienst ist sofort von außen erreichbar.
4. Leichtgewichtig und dennoch leistungsstark
- Minimale Abhängigkeiten: Durch den Verzicht auf Drittanbieter-Abhängigkeiten sind die Binärdateien schlank und der Build erfolgt schnell.
- Unterstützung für TLS & UDP: Neben TLS-Datenverkehr wie HTTP/gRPC lassen sich über QUIC-Datagramm-Backhaul auch UDP-Dienste wie Spielserver problemlos bereitstellen.
Erste Schritte
- GitHub-Repository: https://github.com/gosuda/portalite
- Go-Paket:
go get gosuda.org/portalite