一个局域网文字/文件 P2P 传输工具,现已集成 TURN 服务支持
项目中仅在线用户列表和 WebRTC 信令迫不得已需要一个轻量化的服务,其他数据传输都采用了基于 WebRTC 的点对点传输,不经过中间服务器,所以局域网内互传一些文字/文件都比较快。内置 TURN 服务可解决 NAT 穿越问题。
demo 演示:https://fagedongxi.com
- ✅ 集成 Node-TURN 服务器,解决 NAT 穿越问题
- ✅ 可配置的 TURN 服务参数
- ✅ 自动检测和使用本地 TURN 服务器
无需安装任何软件,打开浏览器,无需登录直接传输。 现在支持跨网络环境传输(通过内置 TURN 服务器)。
接收大文件比较吃内存(单文件几百兆一般没问题)
比如新装的 win 系统需要从 mac 系统传一些需要 🪜 才能下载的软件或者搜到的一些东西
自
1.1.0版本后,不再需要单独部署网页端了,仅启动一个服务端即可 自1.1.4版本后,集成了 TURN 服务器,可以解决网络连通性问题
参考视频:https://v.douyin.com/zp_dXkV1fys/
- 安装 nodejs,node 版本没有测试,我用的是
16.20.2 - 下载源码
- 进入 项目根目录,运行
npm install - 创建配置文件
config.json(可选,参考config.example.json) - 运行
npm run start
- 下载对应平台的可执行文件,直接执行即可
- 创建配置文件
config.json(可选,参考config.example.json) - 如果你用 windows,可参考 https://v.douyin.com/CeiJahpLD/ 注册成服务
现在使用统一配置文件 config.json 来管理所有设置,包含三个主要板块:
{
"server": {
"httpPort": 8081,
"host": "0.0.0.0"
},
"rooms": [
{
"roomId": "testroom",
"pwd": "5d41402abc4b2a76b9719d911017c592",
"remark": "测试房间 - 密码: hello"
}
],
"turnConfig": {
"enabled": true,
"turnPort": 3478,
"minPort": 49152,
"maxPort": 65535,
"debugLevel": "ERROR",
"listeningIps": ["0.0.0.0"],
"relayIps": ["0.0.0.0"],
"authMech": "long-term"
}
}httpPort: Web 服务器端口(默认 8081)host: Web 服务器绑定地址(默认 0.0.0.0)
roomId: 房间 IDpwd: 房间密码的 MD5 哈希值remark: 房间备注说明
enabled: 是否启用 TURN 服务器(true/false)turnPort: TURN 服务器端口(默认 3478)minPort/maxPort: 中继端口范围debugLevel: 日志级别listeningIps/relayIps: 监听和中继 IP 地址
项目现已完全迁移到统一配置文件 config.json。旧的配置文件不再支持:
- 已合并到turn-config.jsonconfig.json的turnConfig板块- 已合并到room_pwd.jsonconfig.json的rooms板块
应用会自动使用内置的 TURN 服务器,每次启动时自动生成随机的用户名和密码,无需手动配置认证信息。
- ✅ 每次启动自动生成随机用户名(10 位字符)
- ✅ 每次启动自动生成随机密码(12 位字符)
- ✅ 使用字母数字混合(a-z, A-Z, 0-9)
- ✅ 前端自动获取最新的 TURN 认证信息
{
"enabled": true,
"turnPort": 3478,
"minPort": 49152,
"maxPort": 65535,
"debugLevel": "ERROR",
"listeningIps": ["0.0.0.0"],
"relayIps": ["0.0.0.0"],
"authMech": "long-term"
}在应用目录下创建 turn-config.json 文件来覆盖默认配置(认证信息仍然会自动生成):
{
"enabled": false,
"turnPort": 3478,
"minPort": 50000,
"maxPort": 60000,
"debugLevel": "WARN"
}enabled: 布尔值,控制是否启用 TURN 服务器(true=启用,false=禁用)turnPort: TURN 服务器监听端口minPort/maxPort: 中继端口范围debugLevel: 日志级别(ERROR、WARN、INFO、DEBUG)listeningIps/relayIps: 监听和中继 IP 地址
# 复制示例配置文件
cp config.example.json config.json
# 编辑配置文件
nano config.json# 使用配置文件启动
npm start
# 或指定端口覆盖配置
npm start 8082 3479- ✅ 每次启动自动生成随机 TURN 用户名(10 位字符)
- ✅ 每次启动自动生成随机 TURN 密码(12 位字符)
- ✅ 使用字母数字混合(a-z, A-Z, 0-9)
- ✅ 前端自动获取最新的 TURN 认证信息
- ✅ 统一配置管理,避免配置文件分散
如果启用了 TURN 服务器,需要确保以下端口可访问:
- HTTP 服务端口(默认 8081 或配置文件中的 httpPort)
- TURN 服务端口(默认 3478 或配置文件中的 turnPort)
- TURN 中继端口范围(默认 49152-65535 或配置文件中的范围)
在线列表看见对方,但一直处于断开的状态且无法发送消息:
- 原因一:浏览器不支持 WebRTC(目前最新版已经在用户打开后自动检测并加入提示),旧版没有检测功能可以临时用这个进行测试:https://space.coze.cn/s/qDNpw1y7MJw/
- 原因二:网络环境不支持互相访问
解决方案:
- ✅ 使用内置 TURN 服务器(推荐,已集成)
- 在
config.json中设置"turnConfig.enabled": true - 确保防火墙开放相应端口
- 在
- 禁用 TURN 服务器(仅局域网使用)
- 在
config.json中设置"turnConfig.enabled": false - 适用于同网段内的简单通信
- 在
- ✅ 使用内置 TURN 服务器(推荐,已集成)
server
{
server_name fagedongxi.com;
index index.html;
listen 80;
location / {
proxy_pass http://127.0.0.1:8081/;
}
location /ws/ {
proxy_pass http://127.0.0.1:8081/ws/;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
本项目仅用于学习交流,请勿用于非法用途,否则后果自负。