我看到了有關的蟒蛇長輪詢某些線程,但我的問題是沒有這麼位使用一些額外的工具包像龍捲風等 我有JS的客戶端。它將請求發送到我的/ longpolling頁面並等待響應。一旦它得到響應或超時,它會發送一個新的。這很好。 我/ longpolling處理程序是一個函數:Simpliest蟒蛇長輪詢
currentTime = datetime.datetime.now()
lastUpdate = datetime.datetime.strptime(req.GET["ts"], "%Y-%m-%dT%H:%M:%S.%f")
response = {
"added": [],
"updated": [],
"deleted": []
}
while (datetime.datetime.now() - currentTime).seconds < 600:
time.sleep(2)
now = datetime.datetime.now()
#query = Log.objects.filter(time__range = (lastUpdate, now))
query = Log.objects.raw("SELECT * FROM ...log WHERE time BETWEEN %s and %s", [lastUpdate, now])
exist = False
for log in query:
exist = True
type = {
NEW: "added",
UPDATED: "updated",
DELETED: "deleted"
}[log.type]
response[type].append(json.loads(log.data))
if exist:
response["ts"] = now.isoformat()
return JsonResponse(response)
response["ts"] = datetime.datetime.now().isoformat()
return JsonResponse(response)
10分鐘內每2秒我要檢查在DB新Log實例來通知客戶端JS。 我嘗試通過phpMyAdmin插入日誌記錄manualy,但接下來的Log.objects.filter(time__range =(lastUpdate,now))返回空的QuerySet。我複製原始查詢從.query attr它看起來像:
SELECT ... FROM ... WHERE時間BETWEEN 2013-01-05 03:30:36和2013-01-05 03:45:18
所以我引用了2013-01-05 03:30:36和2013-01-05 03:45:18並通過phpMyAdmin執行了這個SQL,它返回了我添加的記錄。 我tryed:
查詢= Log.objects.filter(time__range =(LASTUPDATE,現))
和
查詢= Log.objects.raw(「SELECT * FROM ... WHERE登錄時間與%s和%s」,[LASTUPDATE,現在])
和
日誌中query.iterate():
但它總是返回一個空查詢集,但從來沒有我添加的記錄。 我以爲有一些緩存,但在哪裏? 或者問題是我插入新記錄,直到而True:循環正在執行?或者也許有一些線程保護?爲什麼phpMyAdmin看到記錄,但Django不記錄? 請幫我,我卡住了。
嘗試在查詢之前使用django代碼插入日誌條目。難道你不小心將phpMyAdmin指向了你指向Django的不同數據庫?調試和生產dbs之間的區別? – dokkaebi
好主意在之前插入新的日誌條目,我會嘗試並回答。不,它們連接到同一個數據庫。 –
Okey,所以如果我在查詢之前創建新的日誌條目,我在QuerySet中獲取它並正確添加到響應對象並響應客戶端。在客戶端發送新的請求後,如此預期,那麼現在呢? –