python django长轮询等待
我使用Django和Rest框架。为了将最新更新返回给其他客户端,我做了一个长时间的轮询 为了等待长时间的轮询,我使用了time.sleep(秒)函数。但这似乎只适用于做出改变的客户。其他客户似乎被困在某个地方 您能建议在Python Django中等待长时间轮询的正确方法吗python django长轮询等待,python,django,django-rest-framework,Python,Django,Django Rest Framework,我使用Django和Rest框架。为了将最新更新返回给其他客户端,我做了一个长时间的轮询 为了等待长时间的轮询,我使用了time.sleep(秒)函数。但这似乎只适用于做出改变的客户。其他客户似乎被困在某个地方 您能建议在Python Django中等待长时间轮询的正确方法吗 class ChangedItemsPollingView(APIView): permission_classes = [permissions.IsAdminUser] def get(self, r
class ChangedItemsPollingView(APIView):
permission_classes = [permissions.IsAdminUser]
def get(self, request):
request_received_time = datetime.datetime.now()
ten_seconds_later = request_received_time + datetime.timedelta(seconds=10)
while(datetime.datetime.now() < ten_seconds_later):
changed_items = Asset.objects.filter(updated_at__gt=request_received_time)
if(changed_items):
tmpJson = djangoSerializers.serialize('json', changed_items)
tmpObj = json.loads(tmpJson)
return Response(tmpObj)
time.sleep(3)
return Response([])
class ChangedItemsPollingView(APIView):
权限\u类=[permissions.isadmin用户]
def get(自我,请求):
request\u received\u time=datetime.datetime.now()
十秒之后=收到请求时间+日期时间.timedelta(秒=10)
while(datetime.datetime.now()<10秒后):
更改的项目=资产.对象.过滤器(在收到请求时更新)
如果(更改的项目):
tmpJson=djangoSerializers.serialize('json',已更改\u项)
tmpObj=json.loads(tmpJson)
返回响应(tmpObj)
时间。睡眠(3)
返回响应([]))
在长轮询中,您的API端点返回:
- 它仍在等待结果的信息
- 如果结果可用,则返回结果
get()
方法中执行长时间运行的操作。您应该在后台对其进行排队和处理(例如芹菜)
例如:
类轮询视图(APIView):
def get(自我,请求):
# ...
如果result.u可用():
返回响应(result.json())
返回响应({“status”:“waiting”})
是,但长轮询应该等待,而不是发送响应。它怎么能暂停响应。你在前端等待,而不是后端。我想在前端等待不是一个漫长的轮询。。?我指的是这篇文章。代码正常,但当重复请求相同的URL时,Chrome浏览器会在缓存模式下运行。它返回缓存的值,而不接触服务器。