簡體   English   中英

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

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

我正在開發基於實時的應用程序,它需要在更改時更新用戶的位置。

Android 應用程序用作前端,它使用Google/Fused Api獲取位置,在onLocationChanged(loc:Location) ,我通過Websocket發送最新位置。 然后位置更新由django 通道消費者接收,該消費者的工作是將位置異步存儲在數據庫中(我正在使用@database_sync_to_async裝飾器。

但問題是,當 Android 應用嘗試每秒發送 10-15 個位置更新時,服務器會崩潰。 更新實時位置的有效方法是什么?

注:代碼可按需提供

問問自己需要什么樣的分辨率來處理這些數據。 你真的需要每秒更新 10 次嗎? 如果沒有,請每第 n 次更新,或者看看 Android 是否只會給你更慢的更新。 其次,尋找本機異步數據庫庫。 @database_sync_to_async 每次調用時都會運行一個不同的線程,這會扼殺您從事件循環中獲得的性能提升。 如果您在一個線程中說,您將使 CPU 緩存保持新鮮。 您將無法使用 ORM。 但是你真的需要一個數據庫還是 Redis 可以工作? 如果是這樣,直接調用 aioredis 會快很多,因為它在內存中,你可以使用它的快速數據結構,如隊列和集合。 如果您需要 Redis 更快,請查看它的多線程分支 KeyDB。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM