一、 现象

        从日常使用微信文件助手来看,每次从电脑端通过文件助手,传输文件到手机,发现文件都是先传到服务端,完成后再从服务端传到手机端,花了上传和下载两份时间。为什么不能在PC端上传的时候,手机端就开始下,服务端建立一个管道队列,以FIFO的方式处理流数据,并且创建数据的副本存于服务端,这样实时获得数据,时间减少一半岂不美哉?

二、分析

  1. 文件传输的方式
            笔者猜测是通过TCP协议,以安全的方式传输文件。在传输之前,需要对文件预处理,并且拆分成一个个的报文,以某种策略,比如滑动窗口的方式,上传至服务器,如果数据丢失需要重传。服务器以报文的标志位来排序,最终拆掉协议外套,拼装数据。
  2. 服务端的任务
           服务器作为接收方获得客户端的数据,再以发送方给其他端同步。目前微信仅支持一个PC端和一个移动端两头登录,其实服务器的作用就是中介,并且保存了文件的副本。
  3. 为何不同步进行传输(以下内容仅凭推论)
    假设有以下角色:客户端A <=> 服务器S <==> 客户端B
            ① 服务端需要维护一系列缓存队列,如果A->S->B,B出现阻塞,会影响A的上传;
            ② 服务端需要建立P2P代理机制,来处理A->S,S->B两段错误重传:A->S失败的需要A重传,A->S成功但是S->B失败可以让S拿副本的缓存传给B
            ③ 服务端需要对副本的保存将受到②的影响,只有A->S失败才会修改副本数据

三、结论(基于浅显的认知)

        微信作为免费使用的工具,有文件传输服务已经很不错了,绝对不会强求更多极致的服务了。而QQ是有在线传输和离线传输两种模式的,毕竟QQ有Q币相关的业务比较赚钱,微信的收入直观上是来自广告的,其他的不敢乱讲。
        最后一点小的建议,当微信的两个端处于同一局域网的时候,可以采用局域网直达的传输,然后服务端备份的那个可以慢慢再网上传,这样速度有保证,数据有备份。