websocket知识汇总以及websocket在Django中的实现

本文介绍了从放弃Ajax轮询转向WebSocket的原因,并详细讲解了在Django中使用dwebsocket库实现WebSocket的过程,包括视图函数的装饰器使用、WebSocket的属性和方法,以及心跳包机制的实现,确保了前端与后端的稳定连接。
摘要由CSDN通过智能技术生成

        最近在完成项目中需要用到实时技术,项目需求是将后端的一个文件内容实时读取然后发送到前端.这里主要涉及到两个技术.一个是后端如何实时读取一直在更新中的数据,另一点是如何保证web前后端的通讯,能将读取到的数据实时传送给前端.

        由于主要是进行后端开发,前端涉及的少,趁这个机会刚好学习了一下前端的一些知识.

一.Ajax轮询

        最开始解决实时通讯Google后使用了ajax的轮询技术,如果说从要求上来看基本满足要求,代码也十分简单,核心代码段如下:

                var getting = {
                    url:"{% url '...' %}",
                    type:'GET',
                    dataType: 'text',
                    success: function(data) {
                        $("#output").val(data);
                        //sleep(1000);
                        $.ajax(getting)
                        }
                    }
                };
                $.ajax(getting);

        也就是ajax异步请求成功后再次调用自己发送get请求,这样可以满足"实时"获取到后端一直在更新的文件的最新内容.但是,有个很严重的问题就是前端一直在get请求,导致极大的占用带宽,占用服务器的处理资源.后来加入修改,将每次发送的请求间隔1s,发现仍然是十分浪费带宽资源.

        后来发现有ajax长轮询技术,就是在每次发送请求后,如果后台有数据,则将数据返回,前端拿到后继续发送请求,如果后台没有数据,就不会response.可以很好的优化ajax的轮询缺陷,但是感觉该方法还是不够好.

        传统的request必须有一个response,对于实时通讯,这样是很差劲的体验.服务器端在建立连接后更新到新数据时无法主动给前端发送response,不够理想.

二.弃用ajax轮询,选择websocket

        后来Google到一个稍微新一点的技术,websocket,刚开始以为是socket的孪生表弟,后来才发现它俩关系跟java和JavaScript一样.有一篇文章讲的很好,入门了解一看便知,websocket基础

        websocket相比较传统http的优势很明显,借阮老师的一张图来看:

                          

  • 9
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值