使用 django-channels/websocket 更新实时位置的有效方法

Efficient way of updating real time location using django-channels/websocket

我正在开发基于实时的应用程序,它需要在用户位置发生变化时更新它。

Android app 用作前端,使用 获取位置Google/Fused ApionLocationChanged(loc:Location) 中,我通过 Websocket[=29 发送最新位置=]。然后 django 频道消费者 接收位置更新,这个消费者的工作是在数据库中异步存储位置(我正在使用 @database_sync_to_async装饰器。

但问题是,当 Android 应用尝试每秒发送 10-15 次位置更新时,服务器会崩溃。更新实时位置的有效方法是什么?

注:可按需提供代码

问问自己,您需要什么样的分辨率来处理这些数据。你真的需要每秒更新 10 次吗?如果不是,请进行每第 n 次更新或查看 Android 是否只会让您的更新速度变慢。其次,寻找一个原生的异步数据库库。 @database_sync_to_async 每次调用它时都会运行一个不同的线程,这会破坏您从事件循环中获得的性能提升。如果您在一个线程中说,您将保持 CPU 缓存新鲜。您将无法使用 ORM。但是您真的需要数据库吗?或者 Redis 可以工作吗?如果是这样,直接调用 aioredis,它会快很多,因为它在内存中,你可以使用它的快速数据结构,如队列和集合。如果您需要 Redis 更快,请查看它的多线程 fork KeyDB。