轮询和长轮询
轮询:轮询就是第隔N秒访问一次服务器
长轮询:访问一次服务器时间比较长,如20秒,并且如果有数据返回则立马结束
# urls urlpatterns = [ path('admin/', admin.site.urls), path('index/', views.index), path('get_json/', views.get_json), path('put_data/', views.put_data), ] # views from django.shortcuts import render from django.http import HttpResponse import json from queue import Queue, Empty que = Queue() # Create your views here. def index(request): return render(request, 'index.html') def get_json(request): # 轮询 # data = {'name': 'Alex', 'age': 33} # return HttpResponse(json.dumps(data)) # 轮询结束 # 长轮询开始 # 队列模拟长轮询,队列等待10秒 response = {'status': True, 'data': None} try: val = que.get(timeout=10) response['data'] = val except Empty as e: response['status'] = False return HttpResponse(json.dumps(response)) # 长轮询结束 def put_data(request): que.put('随便放一此数据') return HttpResponse('已经发送数据') # HTML和JSTitle 空内容
# JS开始 // 轮询开始 /* $(function () { // 轮询的关键 setInterval(func, 2000) }); function func() { $.ajax({ url:'/get_json/', type:'post', success:function (data) { data = JSON.parse(data); console.log(data); } }) }*/ // 轮询结束 // 长轮询开始 $(function () { func() });function func() { $.ajax({ url: '/get_json/', type: 'post', success: function (data) { data = JSON.parse(data); if (data.status){ location.href='http://www.baidu.com/' } // 自己调用自己是长轮询的关键 func() } }) } // 长轮询结束
JS结束