永远在线的STUN服务器列表:Always Online: STUN Servers
在进行实时通信和网络传输时,STUN(简单Traversal of User Datagram Protocol Through Network Address Translators)服务器是解决NAT(网络地址转换)问题的关键工具。现在,我们有一个精心维护并定时更新的STUN服务器列表——Always Online: STUN Servers,它将为你的应用程序提供可靠的连接支持。
项目介绍
总是在线的STUN服务器是一个小时级刷新的公共STUN服务器列表。这个项目的目标是提供一个稳定且不断更新的资源,确保你的应用始终能够找到可用的STUN服务进行网络穿透。
项目技术分析
项目通过自动化脚本定期检查每个STUN服务器,判断其是否对RFC5389的BINDING
请求作出响应。只有成功响应的服务器才会被纳入最终的列表中。列表包括IPv4和IPv6地址,并且分别提供了对应的URL,供直接硬编码到你的应用中。
此外,为了防止滥用,服务器列表会每次刷新时进行随机排序,这样可以分散流量,避免单一服务器过载。
项目及技术应用场景
- 实时音视频通话应用,如WebRTC。
- 在NAT环境下的P2P文件共享服务。
- 需要穿越NAT的游戏服务器。
- 任何依赖UDP或TCP进行网络通信但受NAT阻碍的应用。
项目特点
- 持续更新:每小时自动刷新,确保提供的都是在线服务器。
- 易于集成:提供固定的文本文件链接,可直接硬编码至你的应用代码中。
- 多样化的IP版本:支持IPv4和IPv6两种地址类型。
- 负载均衡:通过列表随机排序,减少特定服务器的压力。
- 灵活的贡献机制:如果你有其他公开的STUN服务器,可以通过PR或Issue添加到列表中。
示例代码:JavaScript集成
以下是使用JavaScript结合Geolocation选择最近的STUN服务器的示例:
// 获取地理位置信息
const GEO_LOC_URL = "https://raw.githubusercontent.com/pradt2/always-online-stun/master/geoip_cache.txt";
// 获取IPv4 STUN服务器列表
const IPV4_URL = "https://raw.githubusercontent.com/pradt2/always-online-stun/master/valid_ipv4s.txt";
// ...获取经纬度代码...
// 获取最接近的STUN服务器
const closestAddr = (await fetch(IPV4_URL).text())
.trim()
.split('\n')
.map(parseServer)
.reduce(findClosest)[0];
// 打印最近的STUN服务器
console.log(closestAddr);
// 辅助函数
function parseServer(addr) {
// ...
}
function findClosest([prev, prevDist], [curr, currDist]) {
// ...
}
对于依赖高效、可靠网络连接的开发者来说,Always Online: STUN Servers是一个不可或缺的资源。立即集成并提升你的应用性能吧!