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

和 onmessage 回调,而且每个信道也会提供同样的 binaryType、bufferedAmount 和
               protocol 字段。

               不过,由于 DataChannel 是端到端的,而且在更灵活的传输协议之上运行,因此它还
               具备一些 WebSocket 没有的功能。前面代码示例就展示了这其中一些最重要的差别:

               •   与 WebSocket 构 造 函 数 不 同, 它 需 要 传 入 WebSocket 服 务 器 的 URL, 而
                 DataChannel 只是 RTCPeerConnection 对象的一个工厂方法;
               •   与 WebSocket 不同,任何一端都可以初始新的 DataChannel 会话,会话建立后就会
                 触发 onDataChannel 回调;
               •   与 WebSocket 不同,它运行在可靠有序的 TCP 协议之上,而每个 DataChannel 都
                 可以经过配置,实现自定义的交付和可靠性。


                          DataChannel 与 WebSocket API 的对比(表 18-2)

                DataChannel API 是 WebSocket API 的超集,因此我们前面讨论过的关于 WebSocket
                的一切,包括回调、标志、对处理文本和二进制数据的优化,以及子协议协商,
                都可以直接对应到 DataChannel API;参见 17.1 节“WebSocket API”。

                表18-2:WebSocket与DataChannel
                                         WebSocket              DataChannel
                 加密                      可配置                    始终加密
                 可靠性                     可靠                     可配置
                 交付方式                    有序                     可配置
                 多路复用                    不支持(有扩展)               支持
                 传输机制                    面向消息                   面向消息
                 二进制传输                   支持                     支持
                 UTF-8 传输                支持                     支持
                 压缩                      不支持(有扩展)               不支持

                当 然 啦,WebSocket 与 DataChannel 最 大 的 区 别, 还 是 底 层 传 输 协 议 不 一 样。
                WebSocket 运行在 TCP 之上,每条消息的交付都是可靠且有序的;而 DataChannel
                运行在下列三个协议之上:

                •   UDP 提供端到端的连接;
                •   DTLS 对传输的数据加密;
                •   SCTP 支持多路复用、流量和拥塞控制及其他功能。
                DataChannel 经过配置,可以提供与 WebSocket 相同的可靠性和有序交付语义。当
                然,更重要的是,DataChannel 真正的威力恰恰在于它不一定必须使用有序和可靠
                的语义!每个信道可以指定自己的交付和可靠性要求,而数据可以直接从一端传
                送到另一端。



               306   |   第 18 章
   311   312   313   314   315   316   317   318   319   320   321