介绍 Portalite:一款用于在应用程序中添加 Portal Ingress 的超轻量级开源客户端与 SDK
By Lemon Mint
views ...
在先前介绍 Portal 时,我们探讨了现代 Web 的问题。随着 AI 编码工具的涌现,任何人都可以构建网站,然而将其发布至世人面前的工作,依然由各大平台与云计算服务商所垄断。Portal 是一项旨在将发布权利交还给个人的项目,它将 Web 的托管与内容创作进行解耦,并通过端到端加密(end-to-end encrypted)的转发机制,将个人的本地服务连接至全球网络。
发布 Portalite
今天,我正式发布 Portalite。Portalite 是一个采用极简依赖构建的超轻量级 Portal 客户端以及 Go SDK。
如果说 Portal 代表的是“将如何重塑 Web”的哲学,那么 Portalite 便是将该哲学融入开发者应用程序中最轻薄的粘合剂。开发者无需进行复杂的云端配置或部署流水线,只需导入 SDK 并添加寥寥数行代码,即可将 Portal ingress 引入自己的应用程序。当应用程序启动的瞬间,原本仅存在于本地的服务器便转化为可在互联网任意位置访问的公共服务。
1. 仅需两行代码的公共 Ingress
Portalite 支持 Go 语言的标准接口 net.Listener。只需替换现有 Web 框架或服务器代码中的监听器,即可实现即时运行。
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): 彻底免除端口映射、静态 IP 以及防火墙入站规则的配置需求。
- 标准兼容: 与
http.Server、grpc.Server以及 Gin、Echo、Chi 等所有使用标准net.Listener的 Go 语言库保持 100% 兼容。
2. 核心:多中继同时绑定(Multi-Relay Binding)
由于大多数隧道工具依赖于单一的端点,一旦转发服务器宕机,服务亦会随之中断。Portalite 则通过同时连接多台转发服务器来正常运作。
- 无中断故障隔离(Failover): 纵然部分转发服务器发生宕机或网络延迟,其余正常运行的转发服务器仍可通过相同的虚拟监听器持续导入流量。
- 消除单点故障(SPOF): 除非所有转发会话同时断开,否则应用程序的
Accept()循环绝不会中断。 - 端到端加密(E2EE): 流量在加密状态下进行中继,因此转发服务器无法窥探或篡改数据。
- 自动重连与自愈(Self-Healing): 面对临时的网络断开或转发服务重启,系统亦能在后台自动重新协商会话与令牌以恢复连接。
3. 通过单行 CLI 命令实现即时使用
若所用并非 Go 语言代码,抑或需要进行快速测试,仅需通过命令行传入端口号即可。
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
命令执行的瞬间即会生成多重转发 URL,并立即转入可供外部访问的状态。
4. 轻量却强劲的功能
- 极简依赖: 剥离第三方依赖,致使二进制文件更为轻量且构建速度更快。
- 支持 TLS 与 UDP: 不仅支持 HTTP/gRPC 等 TLS 流量,亦可通过 QUIC 数据报回传(datagram backhaul)轻松暴露诸如游戏服务器等 UDP 服务。
开始使用
- GitHub 仓库:https://github.com/gosuda/portalite
- Go 软件包:
go get gosuda.org/portalite