首页 > 其他 > 详细

基于长轮询简易版聊天室

时间:2019-12-31 11:03:54      阅读:74      评论:0      收藏:0      [点我收藏+]

一. 浏览器端代码

技术分享图片
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h3>web 聊天室 {{ name }}</h3>
<div>
    <input id="txt" type="text" placeholder="请输入消息">
    <input type="button" value="发送" id="btn">
</div>
<div>
    <h3>聊天记录</h3>
    <div id="content"></div>
</div>

<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
<script>
    $(function () {
        $("#btn").click(function () {
            $.ajax({
                url:/send_msg/,
                type: POST,
                data:{msg: $("#txt").val()},
                success: function (arg) {
                    tag = $(<p>);
                    tag.text(arg);
                    $("#content").append(tag);
                }
            })
        })
     });

    function getMessage() {
        $.ajax({
            url:/get_msg/,
            type:get,
            dataType:JSON,
            data:{"name":"{{name}}"},
            success: function (arg) {
                console.log(arg);
                if (arg["msg"]) {
                    tag = $(<p>);
                    tag.text(arg["msg"]);
                    $("#content").append(tag);
                } else {
                    console.log("没有新消息!")
                }
                getMessage()
            }
        })
     }

    $(function () {
        getMessage()
     })

</script>

</body>
</html>
View Code

二. django后端代码

技术分享图片
from django.shortcuts import render,HttpResponse
from django.http import JsonResponse
import queue
QUEUE_DICT = {}

def home(request):
    name = request.GET.get(name)
    QUEUE_DICT[name] = queue.Queue()
    return render(request,home.html,{"name":name})

def send_msg(request):
    msg = request.POST.get("msg")
    print(msg)
    for q in QUEUE_DICT.values():
        q.put(msg)
    return HttpResponse("消息发送成功")

def get_msg(request):
    info = {"status":True,"msg":None}
    name = request.GET.get("name")
    q = QUEUE_DICT[name]
    try:
        msg = q.get(timeout=10)
        info["msg"] = msg
    except queue.Empty as e:
        info["status"] = False
    return JsonResponse(info)
View Code

此处省略路由配置...

基于长轮询简易版聊天室

原文:https://www.cnblogs.com/guniang/p/12123242.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!