Erik,你的问题比听起来要简单得多。
这个问题已经存在了十年或者两年。无需在这里重新发明轮子。
为什么轮询/ping 是一个坏主意
ISP 提供的动态 IP 可以具有可变的租用时间,但通常至少为 24-72 小时。每 1-10m 对服务器进行一次 ping 操作将是一个可怕的资源腰围,可能会在 72 小时内为每个客户端生成超过 4,320 个无用的 HTTP 请求。每个请求会说大约 300 字节 * 4,320 个浪费的 http 请求等于 1.3mb 浪费的带宽乘以 100 万客户端的目标客户端数量,您所说的每月浪费的带宽约为 1.2 TB!这只是浪费的带宽,而不是运行应用程序和提供有用信息可能需要的其他带宽。
客户端需要更聪明,而不仅仅是频繁地 ping。相反,他们应该能够在启动时检查他们的 IP 地址是否与 DNS 匹配,然后只有当 IP 更改时,才会向服务器发送通知。这将使您的带宽和服务器处理需求减少数千倍。
您所描述的是动态 DNS
您所说的是“动态 DNS”(既是技术的描述性名称,也是提供 SaaS 解决方案的一家公司的名称)。
动态 DNS 是一个非常简单的 DNS 服务器,它允许您非常快速地更改名称和 IP 地址之间的映射。通常,这对于使用仅提供动态 IP 的 ISP 的设备很有用。每当动态 IP 上的路由器/服务器的 IP 发生变化时,它都会通知动态 DNS 服务器这一变化。
- 动态 DNS 的事实标准协议有据可查。从这里开始:DNS 更新 API,我认为您正在寻找的细节在这里:DynDNS 执行更新。由于路由器硬件通常具有每个人都想使用的内置 DynDNS 客户端,因此大多数商业实现都非常接近相同的协议。
- 大多数路由器(即使是便宜的)已经内置了动态 DNS 客户端。(您可以编写自己的软客户端,但路由器可能是最有效的位置,因为您的客户端可能会使用私有 IP 进行 NAT - 您仍然可以这样做,但代价是公共 IP 发现需要更多带宽)
- 在谷歌上快速搜索“动态 DNS Java 客户端”会找到像这样的完整源代码项目:Java DynDNS 客户端(未经测试,仅说明搜索的强大功能)
系统架构的其他注意事项
假设 IP 客户端映射问题得到解决。你想通了,它工作得很好,你总是知道每个客户端的 IP。然后,您会拥有一个可靠的系统来将文件从移动设备传输到客户端吗?我会说不。
手机和家用电脑都可以有多种连接类型,Wi-Fi、蜂窝数据,也许还有有线数据。这些网络中的每一个都可能具有不同的安全系统。因此,从蜂窝数据移动设备到家庭路由器后面的 wifi 笔记本电脑的连接看起来与在同一个 wifi 网络上连接到笔记本电脑的 wifi 移动设备非常不同。
您可能需要应对物理路由器防火墙。此外,家用电脑可能启用了 Windows 防火墙,可能是 Norton Internet Security,可能是 symantec,可能是 AVG,可能是区域警报等……您知道所有这些潜在客户的防火墙注意事项吗?