首页 > 解决方案 > 以可扩展性处理和发送实时位置更新给附近的用户

问题描述

我从想要完成类似事情的用户那里看到类似的问题,但不是这个细节,我希望它能帮助其他走这条路的人。这是场景:我有一个 android 应用程序,其功能之一是向应用程序上的其他用户显示(经许可)用户位置(使用 Google 地图视图)。

我使用 Socket.io 从头构建了一个套接字服务器。套接字服务器与 RethinkDB 通信以进行实时更新。当客户端发出新位置时,套接字服务器会更新它们在 RethinkDB 上的位置。套接字通过订阅数据库上的更改来获取更新的数据,然后将其发送给套接字上的其他用户以解析/显示在他们的地图上。

基本功能运行良好。两个用户可以在地图上实时看到对方。现在来了我面临的问题。当您使用优步应用程序时,您只能看到您附近特定区域内的车辆。我想实现类似的东西。我的痛点是确定如何最好地只通知彼此在给定半径内的用户。佛罗里达的一些人不需要在加利福尼亚看到一些人,我想如果有很多联系,这将是一个巨大的压力。

  1. 我的第一个想法是:随着每次位置更新的到来,使用地理空间查询向附近的人发送。如果有很多连接,这似乎在服务器上进行了很多处理,而且不实用,因为它会发送给所有用户。

  2. 我的第二个(也是目前正在追求的)想法是使用 Socket.io 房间以某种方式根据用户的位置来分隔用户。在这种情况下,我对他们的位置进行反向地理编码以获取地址,并将他们放在服务器上的房间中以显示他们的状态。这至少缩小了共享房间的用户数量。这确实有效,但它只适用于美国,居住在一个州边境的用户可能会错过在附近看到下一个州的用户。而且,一个州仍然是一个很大的区域。用户只需要看到半径 20 英里内的其他人。没有必要比这更进一步。我认为这是有希望的,但它有一些缺陷。

  3. 我正在考虑进一步研究的第三个想法是使用某种地理围栏。例如,将一个州划分为多个重叠的地理围栏。每个地理围栏在插座上都有自己的房间。我相信这将是映射每个围栏的一项艰巨任务,我必须决定客户端是否知道它所在的地理围栏,或者服务器是否处理该逻辑。最重要的是,除非每个围栏与其相邻的围栏边缘重叠,否则您不会在附近的下一个围栏中看到用户。

所以我的问题是:在我深入研究一条路线之前,我想看看是否有更好的选择,或者我是否过于复杂了。我已经进行了一些挖掘,看看是否有关于 Uber 如何确定哪些司机在没有运气的情况下靠近用户的信息(可能是地理空间查询?)。无论如何,他们的解决方案可能在这种情况下不起作用,因为用户位置可能也在发生变化,同时仍然接收附近用户的更新,但它是从某个地方开始的。

标签: androidsocket.iogeolocationreal-timeandroid-geofence

解决方案


  1. 不会工作,因为想象有人在州边界的西侧,而其他人在边界的另一侧 - 他们彼此相距仅 100m,但您的应用程序没有将它们放在一个桶中。3.完全一样的问题。只有 1. 会起作用,并且没有其他方法可以解决它。

推荐阅读