694 字
2 分钟
在Cloudflare Workers上部署EasyTier WebSocket服务端
GitHub 项目地址
Waiting for api.github.com...
EasyTier WebSocket for Cloudflare Workers
项目简介
该项目是 EasyTier 的第三方服务端实现。EasyTier 是一个去中心化 P2P 组网程序,官方代码使用 Rust 实现。本项目使用 Cloudflare Worker + Durable Object 实现了 JavaScript 版本的 WebSocket 服务端,支持网络转发与 P2P 打洞信息交换。
注意:本项目仅供学习交流使用
技术架构
- 基于 Cloudflare Workers 和 Durable Objects
- 使用 WebSocket 协议进行实时通信
- 采用 Protocol Buffers 进行高效序列化
- 支持消息加密与完整性保护
- 模块化设计,便于扩展和维护
开发环境搭建
前置要求
- Node.js (>= 16.0.0)
- pnpm (推荐) 或 npm
- Wrangler CLI (Cloudflare Workers 工具链)
安装步骤
- 克隆项目仓库:
git clone <your-repo-url>cd easytier-ws-relay- 安装依赖:
pnpm install# 或者使用 npmnpm install- 安装 Wrangler CLI:
npm install -g wrangler- 登录 Cloudflare:
wrangler login本地开发
启动开发服务器
# 启动本地开发服务器pnpm run dev# 或者wrangler dev --ip 0.0.0.0直接启动(不监听文件变化)
pnpm run start# 或者wrangler dev部署到 Cloudflare
部署命令
# 部署到 Cloudflare Workerswrangler deploy配置说明
项目使用 wrangler.toml 文件进行配置,主要配置项包括:
name: Worker 名称main: 入口文件路径compatibility_date: 兼容性日期- Durable Objects 配置
- 环境变量配置
项目结构
easytier-ws-relay/├── protos/ # Protocol Buffers 定义│ ├── google│ │ └── protobuf│ │ └── timestamp.proto│ ├── common.proto # 通用协议定义│ ├── error.proto # 错误协议定义│ └── peer_rpc.proto # 对等节点 RPC 协议定义├── src/│ ├── worker/ # Worker 实现│ │ ├── core/ # Worker 核心功能│ │ │ ├── basic_handlers.js # 基础处理器│ │ │ ├── compress.js # 压缩功能│ │ │ ├── constants.js # 常量定义│ │ │ ├── crypto.js # 加密功能│ │ │ ├── packet.js # 数据包处理│ │ │ ├── peer_manager.js # 对等节点管理│ │ │ ├── protos.js # Protobuf 相关功能│ │ │ ├── protos_generated.js # Protobuf 生成的代码│ │ │ └── rpc_handler.js # RPC 处理器│ │ └── relay_room.js # 中继房间实现│ └── worker.js # Worker 入口文件├── package.json # 项目配置├── wrangler.toml # Cloudflare Workers 配置└── README.md # 项目说明功能特性
- WebSocket 双向通信中继
- 基于 Room 的连接管理
- 使用 Protobuf 进行高效序列化
- 消息加密与完整性保护
- 客户端状态管理与心跳维持
- RPC 请求/响应处理机制
纯 P2P 模式
在 wrangler.toml 的 [vars] 中配置:
EASYTIER_DISABLE_RELAY:"1"开启纯 P2P,默认"0"EASYTIER_COMPRESS_RPC:"0"关闭 RPC 压缩(调试用),默认"1"
修改完配置后按正常方式运行 wrangler dev 或部署即可生效。
Durable Object 地区配置
Durable Object 默认会根据请求来源自动选择最近的地区部署。如需指定地区,可在 wrangler.toml 的 [vars] 中配置:
LOCATION_HINT: Durable Object 的位置提示,可选值如下:
| 参数 | 地区 |
|---|---|
wnam | 西部地区(北美) |
enam | 东部地区(北美) |
sam | 南美洲 |
weur | 西欧 |
eeur | 东欧 |
apac | 亚太地区(默认) |
oc | 大洋洲 |
afr | 非洲 |
me | 中东 |
详细说明请参考 Cloudflare 官方文档
修改完配置后按正常方式运行 wrangler dev 或部署即可生效。
客户端连接说明
部署后,EasyTier 客户端连接地址需要添加路径 /ws。
默认情况下,WebSocket路径为/ws,该路径可以在wrangler.toml中通过WS_PATH变量进行自定义。
easytier中端口号使用0为使用协议默认端口,ws对应80,wss对应443。
开发模式:
ws://your-network-ip:0/ws部署后:
wss://your-deployment.workers.dev:0/ws免责声明
本项目仅供学习交流使用,请勿用于任何商业用途或非法用途。使用本项目代码造成的任何后果,原作者概不负责。
分享
如果这篇文章对你有帮助,欢迎分享给更多人!
在Cloudflare Workers上部署EasyTier WebSocket服务端
https://blog.teleseon.cn/posts/easytier-websocket-cloudflare-workers/ 部分信息可能已经过时