Page 319 - Web性能权威指南
P. 319

}
                       });
                       signalingChannel.onmessage = function(msg) {
                         if (msg.newchannel) { ➌
                           dc = pc.createDataChannel(msg.label, msg.options);
                         }
                       }

                   ➊ 通过发信通道向另一端发送信道配置
                   ➋ 唯一的应用指定的信道 ID(整数)
                   ➌ 用接收到的参数初始化新 DataChannel

                   实践中,如果通信端的数量不多,使用外部协商的性能优势并不明显。这时候,
                   还是让 RTCPeerConnection 对象帮我们完成协商更好。然而,在通信端的数量很
                   多的情况下,发信服务器可以生成相同的描述,同时将它们分发给所有通信端。
                   此时,这种工作流就能派上用场。


                 18.6.2 配置消息次序和可靠性

                 DataChannel 可以让我们使用兼容 WebSocket 的 API 端到端地传输任意数据,就其本
                 身而言,这绝对是独一无二而且十分强大的功能。可是,DataChannel 还支持一种
                 灵活得多的传输方式,因此我们可以自定义每个信道的交付语义,以满足应用和要
                 传输的数据类型的需要:

                 •   DataChannel 可以有序或乱序交付消息;
                 •   DataChannel 可以可靠或部分可靠地交付消息。

                 当然,要把信道配置成有序且可靠交付,那就与 TCP 无异了:与常规的 WebSocket
                 交付效果相同。然而,DataChannel 还为每个信道配置部分可靠性提供了两个选择:

                 •   通过重传实现部分可靠交付
                   消息的重传次数由应用指定。

                 •   通过超时实现部分可靠交付
                   消息的重传间隔(ms)由应用指定。

                 这两个选择都由 WebRTC 客户端实现,意味着应用所要做的,只是决定使用什么交
                 付模型,然后对信道设置正确的参数即可。应用不管理计时器或重传计数器。下面
                 我们再介绍一下配置选项(表 18-3)。





                                                                              WebRTC   |   309
   314   315   316   317   318   319   320   321   322   323   324