文件传输协议

文件控制与批量数据为什么应该分开调度

设计元数据、接受、暂停、取消、ACK 与文件块的通道和优先级,避免大文件占满可靠队列后所有交互都失去响应。

一项能力能否长期维护,不取决于演示是否成功,而取决于团队能否解释每个状态、每次重试和每一份残留数据。 控制消息决定任务是否继续和资源是否释放,它们的价值高于下一块数据。即使使用多个 DataChannel,它们仍可能共享同一个 SCTP association,因此还需要限制 bulk 队列并让调度器保留控制容量。

文件传输要同时对账发送偏移、接收落盘、分块校验和双方终态。进度条到达百分之百,只能说明字节进入队列,不能证明文件完整可用。

设计时必须回答的问题

实现之前先列出不可违反的不变量,再为性能与体验留出调节参数。参数可以灰度,身份、权限和终态规则不能在运行时随意漂移。

  • 控制通道可靠有序且消息很小;bulk 通道按能力使用无序或部分可靠。
  • 所有发送进入同一个优先级调度器,控制队列在每轮都能抢占 bulk。
  • ACK 可聚合但有最大延迟,避免确认风暴也避免窗口长时间停住。

分通道不是终点,真正保证可用性的是统一的有界调度:控制能抢占,批量不饿死,任何一方取消都能迅速收敛。

边界情况不是附加项

不要把异常路径理解成弹一次提示。它还包括在途工作如何停、对端如何获知、残留数据如何处置,以及下一次操作是否会继承旧状态。

  • 两个通道分别直接调用 send,bulk 循环仍可把浏览器底层缓冲塞满。
  • 取消只改变本地 UI,没有带任务 ID 的可靠控制消息和对方确认。
  • 控制调度无公平上限,大量心跳与 ACK 反过来让 bulk 永远得不到发送机会。

用证据确认它真的可用

测试不能以“最后成功了”结束。还要测量经历了多少次副作用、等待多久、是否泄露内容,以及失败后再次执行能否从干净基线开始。

  1. 在 bulk 高水位时发送取消、聊天和暂停,断言端到端延迟在明确上限内。
  2. 制造 ACK 突发和心跳风暴,确认 bulk 仍按最低保障速率前进。
  3. 与只有单通道的旧端互通,验证同一调度器能在一条通道内保持优先级。

可以上线的标准是:用户知道当前发生了什么,系统在异常后能停止或恢复,资源不会无界增长,运维也能从最小必要证据定位阶段。

把方法变成一次真实连接

打开 uCopy,让两台设备在浏览器里安全连接并开始传输。

开始免费使用