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

前面的例子使用了谷歌的公共演示 STUN 服务器。可惜的是,只有 STUN
                            还不够(参见 3.2.3 节中的“现实中的 STUN 和 TURN”),可能还需要再
                            提供一个 TURN,以保证那些不能直接端到端连接的用户能够建立连接
                           (大约 8%)。

                 正像这个例子所展示的,ICE 代理替我们处理了大部分复杂工作:ICE 收集过
                 程是自动触发的,STUN 查找是在后台执行的,而发现的候选项也会自动通过
                 RTCPeerConnection 对象注册。上述过程完成后,我们可以生成 SDP 提议,并通过
                 发信通道发送给另一端。另一端接收到 ICE 候选项后,就可以进行第二步——建立
                 端到端的连接了:只要 RTCPeerConnection 对象设置了远程会话描述(包含另一端
                 的一组候选 IP 和端口号),ICE 代理就会执行连接检查(图 18-8),以确定能否抵达
                 另一端。






















                 图 18-8:WireShark 中端到端 STUN 绑定请求与响应的截图

                 ICE 代理发送消息(STUN 绑定请求),另一端接收之后必须以一个成功的 STUN 响
                 应确认。如果这个过程完成,那么就代表着有了一条端到端连接的路由线路!相反,
                 如果所有候选项都绑定失败,要么将 RTCPeerConnection 标记为失败,要么回退到
                 靠 TURN 转发服务器建立连接。


                             ICE 代理自动确定连接检查时候选项的次序和优先级:首先检查本地 IP 地
                            址,然后是公共 IP,最后才检查 TURN。建立连接后,ICE 代理周期性地
                            向另一端发送 STUN 请求,以此保证连接的持久化。


                 好麻烦!正如本节开头说的,初始化端到端的连接请求,比打开 XHR、EventSource
                 或新 WebSocket 会话要麻烦得多。好在,大部分工作都有浏览器替我们干。可是,


                                                                              WebRTC   |   287
   292   293   294   295   296   297   298   299   300   301   302