webrtc - 为什么使用两个以上 STUN/TURN 服务器会减慢发现速度?
问题描述
我正在为我的 WebRTC 应用程序(建立在 mediasoup 之上)传递一些 STUN 和 TURN 服务器。当我这样做时,我在控制台中收到一条消息,告诉我:“使用两个以上的 STUN/TURN 服务器会减慢发现速度”
我可以将服务器减少到 2 个……但是……为什么更多的伤害?我不希望有最多的可用选项来建立连接吗?
解决方案
因为 ICE 的工作原理是,浏览器最初会查看它可以在您的机器上找到哪些基于 IP 的网络接口。
然后它获取网络接口的数量并将其与单个 STUN 服务器和该服务提供的每个单个 TURN 服务器相结合。接下来,它需要向这些组合中的每一个发送请求并跟踪响应。在 STUN 的情况下,它只是一个单一的响应,在 TURN 的情况下,它通常是多次往返。因此,您拥有的 STUN 和 TURN 服务器越多,从所有这些服务器中获得答案所需的时间就越长。
现在,如果 STUN 服务器 #1 将您的外部 IP 地址报告为 A,端口为 1,则很可能 STUN 服务器 #2 也会告诉您它将 A 视为您的外部 IP 地址,唯一的区别是它报告端口 2。几乎在所有情况下,所有 STUN 服务器都将报告完全相同的外部 IP A。但是一遍又一遍地向另一端的 ICE 代理报告相同的外部 IP 地址并不会增加建立连接的机会,因为它请求都将到达同一个路由器/NAT/防火墙。
对于 TURN 服务器,人们可以争辩说,更多的 TURN 服务器可以提供更多帮助,因为每个 TURN 服务器应该为浏览器提供不同的 IP 地址以进行中继。但是,如果给定的浏览器能够访问一个 TURN 服务器而不是另一个,那将是非常不寻常的。
最后,所有这些服务器都会导致浏览器发出更多的 ICE 候选。所以更多的 ICE 候选人需要发送到其他浏览器或 ICE 代理。结果,尝试本地和远程 ICE 候选者的所有可能排列的 ICE 检查表随着每个 ICE 候选者而变得越来越大。因此它会产生更多的网络流量,而不会增加建立连接的机会。
推荐阅读
- java - 如何解决时区和 SSL 的问题
- android - 我可以使用 NDK 访问设备文件(/dev/...)吗?
- java - Java - 无法导入 JIprolog 包
- php - Xdebug:如何禁用“xdebug.halt_level”
- node.js - 无法在 ember 中创建组件,每次都会遇到错误
- javascript - 如何从 jquery 对话框表中删除表的行?
- reactjs - 有条件地在 React 组件中渲染
- python-3.x - 在这种情况下如何修复“'int'对象不可下标”?
- python - 如何在 django 中显示特定用户创建的所有用户?
- java - 这个程序的未知来源是什么意思,我该如何解决?