轮询和长轮询
轮询:轮询就是第隔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和JS
Title
空内容
# 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结束
浙公网安备 33010602011771号