gpt4 book ai didi

python - 到最近的 AWS 区域的客户端 IP 地址

转载 作者:太空狗 更新时间:2023-10-29 17:49:15 28 4
gpt4 key购买 nike

问题

我想从客户端设备将一些数据上传到 AWS,但我想上传到最近的 AWS 区域的 S3 存储桶。

同样,我希望能够从最近的地区下载。

当然,我会在每个区域设置一个桶

有没有我可以使用的系统,它可以获取客户端的 IP 地址,然后确定它是 us-west-1、eu-west-1、eu-central-1、ap-northeast-1 等?

问题的症结就在于此。我正在上传的数据仅对一个人有用,需要尽快到达那个人。

因此,如果我在英国,我上传了一个文件,而我的预期收件人目前在日本(因为他们可能正在移动)- 上传到伦敦 AWS 区域的 ping 时间会比更近的区域更长去日本。

最佳答案

根据IP查找客户端位置

使用geoip

pip install python-geoip
pip install python-geoip-geolite2

那么您的代码将如下所示。

from geoip import geolite2
match = geolite2.lookup('8.8.8.8')

print match.location

这会产生, (37.386, -122.0838)

查找所有 AWS 中心的位置

信息来自:http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/LocationsOfEdgeServers.html您需要找到它们的地理位置。这可以用 geopy 来完成

pip install geopy

然后

from geopy.geocoders import Nominatim
geolocator = Nominatim()
location = geolocator.geocode("Singapore")
print location.latitude, location.longitude

哪个给

1.2904527 103.852038

您需要对所有位置执行此操作并将数据保存在某个地方。可能在 RDBMS 中(如果你这样做考虑使用 django,django 对使用 GeoDjango 的地理定位搜索有很好的支持)

终于找到距离

找到客户端位置后,我们称它为 l1,找到数据中心位置后,是时候计算距离了

from geopy.distance import great_circle
great_circle(l1.point, l2.point)

还有距离

寻找最近的距离

您可以遍历所有已保存的位置并找到最近的距离,或者如果您将数据保存在支持地理空间数据的 RDBMS 中(马上想到 postgis),您可以使用 ST_Distance 函数用很少的代码快速有效地进行距离比较。如前所述,django对地理空间查询有很好的支持。

如果您使用 Postgis/Django,涉及 great_circle 的循环将被调用 st_distance 所取代。

关于python - 到最近的 AWS 区域的客户端 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36724300/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com