根据地理位置映射到 IP/Server 的域名

domain name to IP/Server mapping as per geolocation

假设我有一个名为 example.com 的域,现在有两个客户端试图连接它

+----------+                                      +-------------+
| Client 1 |\                                     |             |
+----------+ \            +--------------+        |             |
(East Asia)   \---------> |              |        |             |
                          | example.com  | <--->  |   Server    |
              /---------> |              |        |             |
+----------+ /            +--------------+        |             |
| Client 2 |/                 (DNS)               |             |
+----------+                                      +-------------+
(North America)                               (sample application 
                                       server located in North America)

这会给东亚客户带来很大的延迟,我想要的是:

                                                  +-------------+
                                                  |             |
+----------+                                      |  Server 1   |
| Client 1 |\                                /--->|  (Asia)     |
+----------+ \            +--------------+  /     |             |
(East Asia)   \---------> |              |-/      +-------------+
                          | example.com  |        +-------------+ 
              /---------> |              |-\      |             |
+----------+ /            +--------------+  \     |  Server 2   |
| Client 2 |/                 (DNS)          \--->| (N America) |  
+----------+                                      |             |
(North America)                                   |             |
                                                  +-------------+

我的应用程序未使用标准 HTTP 它是 TCP 中的自定义协议,需要与 client.

保持连接

如何在同一域名上进行这种基于地理位置的映射。

鉴于 DNS 的分布式特性,您所要求的确实不容易做到(例如,考虑客户端 1 和客户端 2 都使用 Google 的 public 解析器在 8.8.8.8 进行查找)。如果您真的想这样做,请开始查看主要 DNS 服务器服务公司的网页,看看是否有任何公司提供。

一个可能更便宜和更容易的替代方法是在您的应用程序中添加一个步骤,您的服务器在该步骤中检查连接客户端的来源并可以告诉客户端软件 "Go talk to this other server instead of me"。