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 章
   313   314   315   316   317   318   319   320   321   322   323