GoSuda

Portalite:基于多中继绑定与标准 net.Listener 的轻量级 Portal Go SDK

By Lemon Mint views ...

此前在介绍 Portal 时,我们谈到了现代网络的问题。随着 AI 编程工具的出现,任何人都可以制作网站,但将其公开到全世界的环节,仍然掌握在大型平台和云服务的垄断之中。Portal 将网络的托管与内容创作相分离,并通过端到端加密的中继,将个人的本地服务连接到全球,从而将公开的权利重新交还给个人。

发布 Portalite

今天,我宣布发布 Portalite。Portalite 是一个以最少依赖构建的超轻量 Portal 客户端兼 Go SDK。

如果说 Portal 代表的是"应如何改变网络"的理念,那么 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 代码,或需要快速测试,只需通过 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

命令执行后即刻发放多个中继 URL,并立即可从外部访问。

4. 轻巧而强大的功能

  • 最少依赖: 去除第三方依赖,使二进制文件更轻量,构建更快速。
  • TLS 与 UDP 支持: 不仅支持 HTTP/gRPC 等 TLS 流量,还可通过 QUIC 数据报回传轻松公开游戏服务器等 UDP 服务。

开始使用