【问题标题】:Node.js: choosing DigitalOcean city from location of userNode.js:从用户位置选择 DigitalOcean 城市
【发布时间】:2016-05-11 00:14:56
【问题描述】:

我在我的 HTTP 服务器上使用 Node.js。我希望每个连接的用户都使用 WebSockets 连接到实时游戏服务器,并且我希望他们连接到离他们所在位置最近的服务器。我正在使用 DigitalOcean,所以这里是可用城市列表:

  • 纽约
  • 阿姆斯特丹
  • 旧金山
  • 新加坡
  • 伦敦
  • 法兰克福
  • 多伦多

我需要使用连接用户的 IP 地址的位置并找到最近的城市,这样我才能连接到最近的服务器。

我已经想到了这样做的方法:

  • 获取国家/地区列表并将它们划分为区域组,每个区域属于不同的 DigitalOcean 城市。
  • 获取用户的大概经纬度位置,查看到各个城市的各个经纬度位置的距离,选择距离最小的。

以上两种方法哪个更好?我将如何使用 Node.js 和 NPM 做得更好?还有更好的选择吗?

【问题讨论】:

    标签: javascript node.js npm geolocation digital-ocean


    【解决方案1】:

    我认为解决这个问题的最佳解决方案是使用 Anycast 或类似的解决方案:重定向多个方向的 Ip。

    更多关于任播的信息

    任播是一种网络技术,从多个位置通告相同的 IP 前缀。然后网络根据路由协议成本和可能的广告服务器的“健康状况”来决定将用户请求路由到哪个位置。

    根据任播的实现方式,它还可以提供一定程度的高可用性。如果任播路由的通告以某种健康检查为条件(例如,在此示例中,对知名域的 DNS 查询),那么一旦服务器出现故障,它的路由就可以被删除。一旦网络重新融合,用户请求将被无缝转发到下一个最近的 DNS 实例,无需任何人工干预或重新配置。

    链接

    【讨论】:

    • 说实话,我很难理解这个:D。我只是想知道您如何在不同的位置拥有相同的 IP,以及为什么您建议使用 Anycast 而不是 Geocast。
    • 我不确定 Anycast 是如何工作的,但让我猜测一下我可以使用的系统。我会有一个主液滴,它将用户重定向到其他液滴。主液滴有一个服务器列表(液滴),每个服务器都有一个在线或离线值,通过与这些服务器的通信实时更新。然后我会使用this tool 工具来查找连接用户的纬度/经度位置,并找到到在线服务器的最短距离。你怎么看?
    • 我非常乐意支持并接受这个答案,但首先我希望能清楚一点......谢谢! :)。
    • 如果你只是想要一些简单的东西来检查位置并将用户重定向到最近的服务器,你可以制作一个 API 来接收带有 IPInfoDB 的用户信息(就像他的国家或纬度经度一样)然后你可以进行一些验证并返回地址给用户;我为您谈论了 Anycast,因为它可以准确地制作您想要的东西,并且可以处理负载平衡等等,但它并不容易实现。
    • 还有google play Real-time Multiplayer的解决方案,让你辛苦了。
    猜你喜欢
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    相关资源
    最近更新 更多