轮询和长轮询

独自空忆成欢 提交于 2020-02-08 01:49:21

轮询:轮询就是第隔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结束


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!