Android 处理并向附近用户发送实时位置更新,具有可扩展性

Android 处理并向附近用户发送实时位置更新,具有可扩展性,android,socket.io,geolocation,real-time,android-geofence,Android,Socket.io,Geolocation,Real Time,Android Geofence,我看到过一些用户提出的类似问题,他们希望完成类似的任务,但不是为了这个细节,我希望这能帮助其他人。下面是一个场景:我有一个android应用程序,它的一个功能是(在有权限的情况下)向应用程序上的其他用户显示用户的位置(使用谷歌地图视图) 我使用socket.io从头构建了一个套接字服务器。套接字服务器与数据库通信以进行实时更新。当客户端发出一个新位置时,套接字服务器更新它们在数据库上的位置。套接字通过订阅数据库上的更改来获取更新的数据,然后发送给套接字上的其他用户,以便在其地图上进行解析/显示

我看到过一些用户提出的类似问题,他们希望完成类似的任务,但不是为了这个细节,我希望这能帮助其他人。下面是一个场景:我有一个android应用程序,它的一个功能是(在有权限的情况下)向应用程序上的其他用户显示用户的位置(使用谷歌地图视图)

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

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

  • 我的第一个想法是:每次位置更新时,使用地理空间查询将其发送到附近的位置。如果有很多连接,那么服务器上似乎需要进行大量的处理,但这并不实用,因为它会向所有用户发出消息

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

  • 我正在考虑进一步研究的第三个想法是使用某种地理围栏。例如,将一个状态分割为多个重叠的地理围栏。每个土工围栏在插座上都有自己的空间。我相信这将是一个巨大的任务,映射每个围栏,我必须决定客户机是否知道它在什么地理围栏中,或者服务器是否处理该逻辑。除此之外,除非每个围栏与其相邻的围栏边缘重叠,否则您不会在附近的下一个围栏中看到用户

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

  • 这是行不通的,因为假设有人在州边界的西边,而另一个人在边界的另一边——他们之间的距离只有100米,但你的应用程序不会把他们放在一个桶里。3.这是完全相同的问题。只有一个。这会起作用的,没有别的办法了

  • 谢谢你,玛丽安。我得出了相同的结论并实现了地理空间查询。到目前为止,在测试方面表现良好。不过,还不确定它将如何处理大量流量。