浏览器局域网互传包含两条用途不同的通路:信令通路帮助两端找到对方并协商连接,数据通路负责实际文件和文字。理解这一区别,也就能理解为什么网站能打开并不代表文件一定可以直传。
第一步:临时房间与信令协商
创建方获得随机配对码,加入方提交配对请求并等待允许。服务器通过WebSocket转发双方的会话描述和候选连接信息,它们用于协商数据通道,不是文件正文。
WebSocket保持配对过程中的通信;它不是文件上传接口。房间只保存在当前服务进程内存中,断开或超时清理,因此服务重启后原会话无法继续。
第二步:WebRTC数据通道建立直连
浏览器使用RTCPeerConnection协商连接,通过有序、可靠的DataChannel传输内容,并由浏览器协议栈提供传输加密。无需申请摄像头或麦克风权限,因为这里不使用音视频采集。
本版本将iceServers设为空,不启用STUN或TURN服务。它主要尝试设备可用的本地连接路径,不保证跨网连接,也不会在直连失败时自动改走服务器文件中继。
第三步:先确认,再分块发送
发送方先发送文件名、大小等请求,接收方同意后才开始发送内容。文件按16 KiB分块读取,数据通道缓冲区过大时暂停继续读取,缓冲下降后再发送,避免一次把整个文件塞进发送队列。
磁盘接收把分块聚合为最多约256 KiB的批次写入,发送方最多领先接收进度1 MiB;磁盘较慢时等待接收确认,不持续堆积数据。完整性校验通过后才关闭写入流并提交保存;不支持磁盘接口时仍使用有128 MiB限制的内存模式。
第四步:完整性校验与手动保存
双方按收到或发出的字节增量计算SHA-256。接收方同时检查字节数和摘要,符合预期后才提交磁盘文件或提供内存下载入口,并确认完成;空文件也参与校验。
摘要用于检查传输完整性,无法鉴定发送人身份,也不是病毒检测。文件名和文字按文本显示,不提供HTML预览;下载后打开文件仍需用户判断来源。
常见问题
为什么不能无限传大文件?
接收端的内存、浏览器限制、移动端后台策略及网络状态都会影响可靠性。磁盘模式上限8 GiB,内存模式上限128 MiB,仍需要足够存储空间和稳定的前台运行环境。
直连传输是否不需要服务器?
文件正文不经服务器存储,但首次打开网站、生成房间和交换连接信令仍依赖服务器。两者职责不同。