Page 318 - Web性能权威指南
P. 318
协商确定了 SCTP 参数后,很快就可以交换应用数据。注意,前面看到的 SDP 片段
中并未提到每个 DataChannel 的参数,比如协议、可靠性,或者有序或乱序标签。
因此,在可以发送应用数据之前,初始的 WebRTC 客户端还要发送 DATA_CHANNEL_
OPEN 消息(图 18-16),这个消息描述了数据类型、可靠性、要使用的应用协议,及
信道的其他参数。
࿋
ၩတૌ႙DŽ1y4Dž ႑ڢૌ႙ ᆫံप
੍Ⴀ
Քധ܈ ၹᅱ܈
Քധ
ၹᅱ
图 18-16:DATA_CHANNEL_OPEN 消息初始化新信道
DATA_CHANNEL_OPEN 消息与 HTTP 2.0 中的 HEADERS 帧类似:它显式地打开一
个新流,随后可以立即发送数据帧;参见 12.4.1 节“发起新流”。要了解
有关 DataChannel 协议的更多信息,请参考这个链接:http://tools.ietf.org/
html/draft-jesup-rtcweb-data-protocol。
沟通完信道参数,两端就可以交换应用数据了。本质上,每个信道都作为一个独立
的 SCTP 流发送数据,即所有信道都是在同一个 SCTP 关联之上多路复用出来的。
这样就可以避免不同流之间的队首阻塞,在同一个 SCTP 关联上同时打开多个信道。
外部信道协商
DataChannel 也允许通过外部协商信道参数。在调用 createDataChannel 方法时,
应用可以把 negotiated 参数设置为 true,这样就不会自动发送 DATA_CHANNEL_
OPEN 消息。不过,这样一来,两端就必须指定相同的 id 参数,这个参数可以由浏
览器自动生成:
signalingChannel.send({ ➊
newchannel: true,
label: "negotiated channel",
options: {
negotiated: true,
id: 10, ➋
reliable: true,
ordered: true,
protocol: "appProtocol-v3"
308 | 第 18 章