【问题标题】:Efficient way of updating real time location using django-channels/websocket使用 django-channels/websocket 更新实时位置的有效方法
【发布时间】:2019-08-09 09:17:02
【问题描述】:
我正在开发基于实时的应用程序,它需要在更改时更新用户的位置。
Android 应用 用作前端,使用 Google/Fused Api 和@987654321 获取位置@,我正在通过 Websocket 发送最新位置。 django 频道消费者 接收位置更新,该消费者的工作是将位置异步存储在数据库中(我正在使用@database_sync_to_async 装饰器。
但问题是,当 Android 应用尝试每秒发送 10-15 个位置更新时,服务器会崩溃。更新实时位置的有效方法是什么?
注意:代码可按需提供
【问题讨论】:
标签:
python
django
websocket
django-channels
【解决方案1】:
问问自己,您需要什么样的分辨率来处理这些数据。你真的需要每秒更新 10 次吗?如果没有,请每隔 n 次更新一次,或者看看 Android 是否只会让您的更新速度变慢。其次,寻找一个原生的异步数据库库。 @database_sync_to_async 每次调用它时都会运行一个不同的线程,这会扼杀你从事件循环中获得的性能提升。如果您说在一个线程中,您将保持 CPU 缓存新鲜。您将无法使用 ORM。但是你真的需要一个数据库还是 Redis 可以工作?如果是这样,直接调用aioredis,它会更快,因为它在内存中,你可以使用它的快速数据结构,如队列和集合。如果您需要 Redis 更快,请查看它的多线程 fork KeyDB。