我了解Uber (或任何其他cab服务)服务器通过应用程序接收用户坐标。如果我在上午10点预订出租车优步如何知道哪辆出租车是空置的,离用户坐标最近,然后通知司机?
假设我在纽约市的X点。优步服务器如何知道靠近位置X的出租车是什么?是否所有计程车都在服务器内存中某个位置的固定时间间隔内向服务器发送坐标,然后当用户请求出现时,它会选择最近的cab,还是一个完全不同的算法?
我相信优步使用球形几何服务。但我不知道它在上面有什么帮助?
发布于 2017-06-27 05:07:53
每个cab都有一个设备,将其位置和驱动程序可用性发送到中央服务器。
这允许中央服务器计算出最接近的驱动程序,但也可以根据驱动程序等级和其他商业因素做出决定。
发布于 2020-11-27 15:31:01
我们可以有一个基于发布者/订阅者模型的通知服务,它向所有感兴趣的客户广播当前驱动程序的位置。服务器端维护有兴趣知道驱动程序位置的客户(订阅者)列表,并且每当在对该驱动程序感兴趣的区域内有更新时,通知服务就会向所有订阅客户发送有关该驱动程序当前位置的通知。
正如您所描述的,客户端发送其当前位置,服务器将从感兴趣区域查找所有附近的驱动程序,将它们返回给客户端。在收到此信息后,客户端可以更新其视图,以反映驱动程序的当前位置。客户端可以每5秒查询一次,以限制到达服务器的往返次数。
首选拉模式,因为否则订阅服务器/发布服务器上的更新会很复杂。使用拉模型,PostGIS或ElasticSearch都支持来自一系列地理位置的查询,因此只返回客户端周围的感兴趣区域,从而减少了内存的使用。
发布于 2017-06-27 14:32:47
每个潜水员在中央数据库中都有自己的地位。为了得到最近的一个,他们可能是使用近似,所以他们取用户的纬度/经度,计算出地图上的矩形区域,并选择其中的汽车。然后,经过滤波,可以利用路线图计算出实际距离,这大大增加了资源消耗。
这就是为什么在进行实际计算之前,可能至少有一个或几个过滤阶段。
https://softwareengineering.stackexchange.com/questions/351666
复制相似问题