通过我们的服务器代理请求时如何获取用户所在区域最近的 Xirsys STUN/TURN 服务器

问题描述 投票:0回答:2

Xirsys 文档表示,为了安全起见,您应该始终通过 Web 服务器代理 STUN/TURN 服务器列表的请求,而不是直接从客户端向 Xirsys 发出请求。这是有道理的。但他们还指出,“为了真正受益于所有全球位置,您可以在调用中使用 global.xirsys.net 路径。global.xirsys.net 路径将自动检测用户的位置并返回最近的可用地理位置区域,以便用户获得尽可能最快的响应。”

但是,我们的网络服务器托管在一个区域。我们的网络服务器正在向 global.xirsys.net 发出请求。因此 xirsys 总是返回最近的区域 到我们的服务器,而不是 到用户

我可以以某种方式修改对 Xirsys 的请求以提供用户的 IP 地址吗? (大概这就是它确定用户区域的方式......)或者除了我们自己进行 IP > 区域查找并将我们的请求发送到最近的 Xirsys 区域服务器之外,是否还有其他方法可以工作?

参考文献:

webrtc xirsys
2个回答
2
投票

xirsys-examples-v3 (https://github.com/xirsys/xirsys-examples-v3) 现在支持通过 maxmind 进行地理定位 (https://github.com/runk/node-maxmind)。默认情况下,xirsys-examples-v3 应用程序使用 geolite2 中的免费数据库 (https://github.com/runk/node-geolite2),但我们强烈建议“使用 GeoIP 更新”(https://dev .maxmind.com/geoip/geoipupdate/#Using_GeoIP_Update),然后覆盖 default.json 配置文件中找到的 maxmind 数据库路径。


0
投票

我找到了一种更简单、更快捷的方法来找到最近的 Xirsys TURN 服务器。就这样吧。

  1. 在客户端 — 在
    global.xirsys.net
    上进行 DNS 查找,接收第一个 CNAME 响应(例如
    fr.xirsys.com
    )。这将根据客户端所在区域显示最近的服务器位置。当您请求应用程序的 TURN 凭据时,将此 URL 地址发送到您的服务器/云功能。
  2. 在您的服务器上/在您的云功能中 — 直接在指定的 URL 调用 Xirsys API (此处:
    fr.xirsys.com
    ),而不是全局地址。这将返回该地区的 ICE 候选人以及证书。

瞧,你已经得到了你想要的。您甚至不必维护服务器上的任何服务器列表或位置。而且您不需要任何地理定位 API。

示例

这是控制台中的演示。您必须将其翻译成您选择的编程语言。只是为了澄清这个想法。

步骤1

客户端应用程序执行 DNS 查找。

user@clientpc:~$ nslookup -type=CNAME global.xirsys.net
Server:         127.0.0.53
Address:        127.0.0.53#53

Non-authoritative answer:
global.xirsys.net       canonical name = fr.xirsys.com.

客户端应用程序获得

fr.xirsys.com
,因此它告诉服务器:“嘿,服务器,从 URL
fr.xirsys.com
给我 ICE 候选者”。

第2步

服务器接收到包含 URL 的请求。服务器在收到的 URL 处对 Xirsys API 进行 api 调用:

service@server:~$ curl -s -H "Content-type: application/json"
-XPUT "https://username:[email protected]/_turn/yournamespace"
-d '{"format": "urls"}' | jq

{
  "v": {
    "iceServers": {
      "username": "turnclientusername",
      "urls": [
        "stun:fr-turn4.xirsys.com",
        "turn:fr-turn4.xirsys.com:80?transport=udp",
        "turn:fr-turn4.xirsys.com:3478?transport=udp",
        "turn:fr-turn4.xirsys.com:80?transport=tcp",
        "turn:fr-turn4.xirsys.com:3478?transport=tcp",
        "turns:fr-turn4.xirsys.com:443?transport=tcp",
        "turns:fr-turn4.xirsys.com:5349?transport=tcp"
      ],
      "credential": "turnclientpassword"
    }
  },
  "s": "ok"
}

以下是距离客户端最近的服务器位置的 ICE 服务器 URL。希望我解释得足够清楚。

© www.soinside.com 2019 - 2024. All rights reserved.