파이썬에서 긴 폴링에 관한 몇 가지 스레드를 보았지만 내 문제는 토네이도 등의 추가 키트를 사용하는 것이 조금 아닙니다. js 클라이언트가 있습니다. 그것은/longpolling 페이지에 요청을 보내고 응답을 기다립니다. 일단 응답이나 타임 아웃이 발생하면 새로운 응답을 보냅니다. 이것은 잘 작동하고 있습니다. 내/longpolling 핸들러 함수입니다 :Simpliest python long polling
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)
내가 JS 클라이언트를 통지하는 DB의 새로운 로그인 인스턴스를 확인하려면 10 분 동안 매 2 초. phpMyAdmin을 통해 로그 레코드를 수동으로 삽입하려고 시도했지만 다음 Log.objects.filter (time__range = (lastUpdate, now))는 빈 QuerySet을 반환합니다. .query attr의 원시 쿼리를 복사합니다.
SELECT ... FROM ... 사이에 어디에서 ... 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,]) 사이의 시간
및
012,351,query.iterate에서 로그()에 대한:
그러나 그것은 항상 빈 검색어 세트하지만 결코 내 추가 된 레코드를 반환합니다. 캐싱이 있다고 생각하지만 어디서? 또는 True : 루프가 수행되고있는 동안 까지 새 레코드를 삽입하는 것이 문제입니까? 아니면 일부 스레드 보호가 있습니까? 왜 phpMyAdmin은 레코드를 참조하지만 장고는 그렇지 않습니까? 도와주세요, 제가 붙어 있습니다.
쿼리하기 바로 전에 django 코드를 사용하여 로그 항목을 삽입 해보십시오. 어쩌면 phpMyAdmin을 django를 가리키는 곳과 다른 데이터베이스에서 가리키는 것이 가능합니까? 디버그와 프로덕션 DB 또는 다른 것의 차이점은 무엇입니까? – dokkaebi
방금 전에 새로운 로그 항목을 삽입하는 것이 좋습니다. 시도하고 대답하겠습니다. 그리고 아니, 그들은 동일한 데이터베이스에 연결되어 있습니다. –
Okey, 쿼리하기 전에 새 로그 항목을 만들면 QuerySet에서 가져오고 응답 개체에 올바르게 추가되어 클라이언트에 응답합니다. 클라이언트가 예상대로 새 요청을 보낸 후에 지금 무엇을해야합니까? –