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 章