随笔 - 105  文章 - 0  评论 - 0  阅读 - 40744

轮询和长轮询

轮询:轮询就是第隔N秒访问一次服务器
长轮询:访问一次服务器时间比较长,如20秒,并且如果有数据返回则立马结束

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# 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结束
posted on   Treelight  阅读(448)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示