1. 项目定位与用途
hostc 是一个零配置的隧道工具,核心定位是将本地服务快速、安全地暴露到公网。它基于 Cloudflare Workers 边缘网络构建,用户无需任何网络配置,只需运行一个命令,即可获得一个公共 HTTPS URL,该 URL 将公网流量转发到本地运行的 HTTP 或 WebSocket 服务。项目主要面向开发者、测试人员和需要临时分享本地应用的场景,提供类似 ngrok 但更轻量、更快速的解决方案。其用途包括本地开发调试、团队协作演示、临时 API 发布等,所有流量均通过 Cloudflare 全球边缘节点路由,确保低延迟和高可用性。
2. 解决的问题
本地开发中,经常需要将本地服务分享给外部访问,但传统方案如端口转发、内网穿透配置复杂,且可能涉及安全风险。hostc 解决了以下问题:一是消除网络配置负担,无需设置路由器端口映射或使用 VPN;二是提供安全的公网访问,所有连接均通过 HTTPS 和 WSS 加密;三是降低延迟,利用 Cloudflare 全球边缘网络实现就近路由;四是简化 WebSocket 支持,传统工具对 WebSocket 代理支持有限,而 hostc 原生无缝支持。此外,它解决了临时演示时服务不可用的问题,通过稳定的隧道连接确保服务持续可访问。
3. 适用场景
hostc 适用于多种开发与演示场景:本地 Web 应用开发中,需要让团队成员或客户实时预览;API 服务测试时,需从外网调用本地接口;WebSocket 服务的调试与演示,如实时聊天、数据推送应用;临时搭建的演示环境,无需部署到正式服务器;以及教学或培训中,快速分享代码示例。对于需要长期稳定暴露服务的场景,用户可自托管 Worker 到个人 Cloudflare 账户,实现可控的持久化隧道。但需注意,hostc 并非为高并发生产环境设计,更适合开发、测试和临时用途。
4. 安装方式
根据仓库文档,hostc 提供多种安装方式以满足不同需求。最简便的方式是直接使用 npx 运行,无需全局安装:`npx hostc 3000`(将 3000 替换为本地服务端口)。对于频繁使用的用户,可通过 npm 全局安装:`npm install -g hostc`,随后直接执行 `hostc 3000`。若需参与项目开发或自托管,需克隆仓库并使用 pnpm 安装依赖:`pnpm install`。开发环境要求 Node.js 18+ 和 pnpm v8+。所有安装命令均基于 npm 或 pnpm 包管理器,仓库中未提供其他包管理器(如 yarn)的指令。自托管 Worker 时,需拥有 Cloudflare 账户并配置 wrangler。
5. 使用方式
hostc 的使用非常简单,基本命令为 `hostc <端口号>`,例如 `hostc 3000` 会将本地 3000 端口的服务暴露到公网。默认情况下,CLI 连接本地 127.0.0.1,可通过 `--local-host` 参数指定其他地址,如 `hostc 3000 --local-host 0.0.0.0` 以绑定所有网络接口。环境变量 `HOSTC_SERVER_URL` 允许覆盖默认服务器地址,用于本地开发或自托管场景,例如 `HOSTC_SERVER_URL=http://127.0.0.1:8787 hostc 3000`。执行命令后,CLI 会建立到 Cloudflare Worker 的 WebSocket 连接,分配一个 `*.hostc.dev` 子域名作为公网 URL,并自动转发 HTTP 请求与 WebSocket 升级。隧道支持自动重连,会话期间保持活跃。详细参数可通过 `hostc --help` 查看,但仓库中未列出其他可选参数。
6. 实现特点与架构
hostc 采用 Monorepo 架构,由 pnpm 统一管理,包含三个核心部分:CLI 客户端(apps/cli)负责本地代理和隧道控制;Worker 服务端(apps/workers)运行在 Cloudflare 边缘,处理公网请求转发和会话管理;共享协议包(packages/tunnel-protocol)定义两端通信的数据格式和 WebSocket 消息类型。技术实现上,CLI 通过 WebSocket 与 Worker 建立持久控制连接,使用自定义隧道协议封装 HTTP 和 WebSocket 帧;Worker 利用 Durable Objects 存储隧道状态,实现跨实例的状态共享和会话保持;所有流量经 Cloudflare 全球网络路由,提供 TLS 加密和边缘安全防护。项目使用 TypeScript 开发,通过 tsup 打包 CLI,wrangler 部署 Worker,并使用 biome 进行代码检查。这种设计确保了低延迟、高可用和易于自托管。