前言

HTTP 协议有一个缺陷:通信只能由客户端发起,做不到服务器主动向客户端推送信息。
WebSocket 协议它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。

websocket简介

随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了。近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通信,扩展了浏览器与服务端的通信功能,使服务端也能主动向客户端发送数据。
  我们知道,传统的HTTP协议是无状态的,每次请求(request)都要由客户端(如 浏览器)主动发起,服务端进行处理后返回response结果,而服务端很难主动向客户端发送数据;这种客户端是主动方,服务端是被动方的传统Web模式 对于信息变化不频繁的Web应用来说造成的麻烦较小,而对于涉及实时信息的Web应用却带来了很大的不便,如带有即时通信、实时数据、订阅推送等功能的应 用。在WebSocket规范提出之前,开发人员若要实现这些实时性较强的功能,经常会使用折衷的解决方法:轮询(polling)和Comet技术。其实后者本质上也是一种轮询,只不过有所改进。
  轮询是最原始的实现实时Web应用的解决方案。轮询技术要求客户端以设定的时间间隔周期性地向服务端发送请求,频繁地查询是否有新的数据改动。明显地,这种方法会导致过多不必要的请求,浪费流量和服务器资源。
  Comet技术又可以分为长轮询和流技术。长轮询改进了上述的轮询技术,减小了无用的请求。它会为某些数据设定过期时间,当数据过期后才会向服务端发送请求;这种机制适合数据的改动不是特别频繁的情况。流技术通常是指客户端使用一个隐藏的窗口与服务端建立一个HTTP长连接,服务端会不断更新连接状态以保持HTTP长连接存活;这样的话,服务端就可以通过这条长连接主动将数据发送给客户端;流技术在大并发环境下,可能会考验到服务端的性能。
  这两种技术都是基于请求-应答模式,都不算是真正意义上的实时技术;它们的每一次请求、应答,都浪费了一定流量在相同的头部信息上,并且开发复杂度也较大。
  伴随着HTML5推出的WebSocket,真正实现了Web的实时通信,使B/S模式具备了C/S模式的实时通信能力。WebSocket的工作流程是这 样的:浏览器通过JavaScript向服务端发出建立 WebSocket 连接的请求,在 WebSocket 连接建立成功后,客户端和服务端就可以通过 TCP连接传输数据。因为WebSocket连接本质上是TCP连接,不需要每次传输都带上重复的头部数据,所以它的数据传输量比轮询和Comet技术小了很多.

环境安装

相关环境:
Django 2.0.3
dwebsocket  0.5.11

使用 django 开发 websocket 服务端,先安装 dwebsocket

pip install dwebdocket==0.5.11

dwebsocket 使用

在视图函数里面使用 accept_websocket装饰器可以接收http 请求和 websocket 请求。
使用require_websocke装饰器只允许使用WebSocket连接,会拒绝正常的HTTP请求。

相关方法说明

1.request.is_websocket()

如果是个websocket请求返回True,如果是个普通的http请求返回False,可以用这个方法区分它们。

2.request.websocket

在一个websocket请求建立之后,这个请求将会有一个websocket属性,用来给客户端提供一个简单的api通讯,如果request.is_websocket()是False,这个属性将是None。

3.WebSocket.wait()

返回一个客户端发送的信息,在客户端关闭连接之前他不会返回任何值,这种情况下,方法将返回None

4.WebSocket.read()

如果没有从客户端接收到新的消息,read方法会返回一个新的消息,如果没有,就不返回。这是一个替代wait的非阻塞方法

5.WebSocket.count_messages()

返回消息队列数量

6.WebSocket.has_messages()

如果有新消息返回True,否则返回False

7.WebSocket.send(message)

向客户端发送消息

8.WebSocket.iter()

websocket迭代器

使用案例

views.py 视图函数

from django.shortcuts import renderimport jsonimport timefrom dwebsocket.decorators import accept_websocket, require_websocketimport re

# Create your views here.

# 上海-悠悠 https://www.cnblogs.com/yoyoketang

@accept_websocketdef test_websocket(request):    '''服务端视图'''

    if request.is_websocket(): # 如果请求是websocket请求:WebSocket = request.websocket

        while True:            # 判断是否通过websocket接收到数据            if WebSocket.has_messages():

                # 接收Websocket客户端发送过来的消息                client_msg = WebSocket.read().decode("utf-8")

                # 设置返回前端的数据                res = re.sub("吗?([??])", "!", client_msg)                messages = {                    'time': time.strftime('%Y.%m.%d %H:%M:%S', time.localtime(time.time())),                    'server_msg': res,                    'client_msg': client_msg                }                request.websocket.send(json.dumps(messages))

            else:                pass

def test_websocket_client(request):    '''客户端视图'''    return render(request,'websocket_client.html')

在templates文件夹下新建 websocket_client.html 模板,编写浏览器 websocket 的客户端



django-websocket

send message

Received Messages

urls.py 配置 websocket 客户端访问的url

from django.contrib import adminfrom django.urls import pathfrom hello import views

urlpatterns = [    path('admin/', admin.site.urls),    path('test_websocket', views.test_websocket, name='test_websocket'),    path('test_websocket_client', views.test_websocket_client , name='test_websocket_client'),]

测试websocket

先启动服务

python manage.py runserver 0.0.0.0:8000

浏览器打开http://localhost:8000/test_websocket_client

输入框,输入内容,给服务端发数据过去,会收到回复

打开console可以看到服务端返回过来的json数据
2020年第四期《python接口自动化+测试开发》课程,7月4号开学(火热报名中!)
本期上课时间:7月4号-9月26号,每周六、周日晚上20:30-22:30
联系QQ:283340479

c++ websocket客户端_python测试开发django81.dwebsocket实现websocket相关推荐

  1. websocket客户端和服务器开发总结

    文章目录 前言 一.websocket资料 1.什么是websocket 2.websocket优缺点 3.WebSocket 原理 4.WebSocket 源码下载 二.客户端 1.开发 2.测试 ...

  2. python开发面试题目_Python测试开发面试笔试题

    Python 测试开发面试笔试题 一,中文单项选择题(30 分,每个 3 分) 1.下列哪个语句在 Python 中是非法的? A.x = y = z = 1 B.x = (y = z + 1) C. ...

  3. spring boot websocket 客户端_Spring Boot 开发集成 WebSocket,实现私有即时通信系统

    ###1/ 概述 利用Spring Boot作为基础框架,Spring Security作为安全框架,WebSocket作为通信框架,实现点对点聊天和群聊天. ###2/ 所需依赖 Spring Bo ...

  4. python的django后台管理_python测试开发django-17.admin后台管理

    前言 通常一个网站开发,需要有个后台管理功能,比如用后台管理发布文章,添加用户之类的操作.django的admin后台管理主要可以实现以下功能 基于admin模块,可以实现类似数据库客户端的功能,对数 ...

  5. c#生成token访问的接口_python测试开发django60.token登录(TokenAuthentication)

    前言 现在很多接口项目在登录的时候返回一个token,登录后的拿着这个token去访问访问登录之后的请求. 本篇使用djangorestframework框架写一个登陆的接口,登录成功后返回token ...

  6. python 怎么把 写好的代码 放到服务器执行_python测试开发django(1)--开始Hello World! - 星空6...

    前言 当你想走上测试开发之路,用python开发出一个web页面的时候,需要找一个支持python语言的web框架.django框架有丰富的文档和学习资料,也是非常成熟的web开发框架,想学pytho ...

  7. hikaridatasource 加密后登陆不上_python测试开发django42.auth模块登陆认证

    前言 在开发一个网站时,经常会用到用户的注册和登陆相关的账号管理功能,auth模块是Django提供的标准权限管理系统,可以提供用户身份认证, 用户组和权限管理. 像用户注册.用户登录.用户认证.注销 ...

  8. python测试开发面试题_python测试开发面试之深浅拷贝

    先来道题热热身 a = ('a', 'b','c') c = copy.copy(a) d = copy.deepcopy(a) if c == d: print("c和d的值相等" ...

  9. ajax get请求_python测试开发django50.jquery发送Ajax请求(get)

    前言 有时候,我们希望点击页面上的某个按钮后,不刷新整个页面,给后台发送一个请求过去,请求到数据后填充到html上,这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新.Ajax可以完美的 ...

最新文章

  1. python读取文件某一行-python计算文件的行数和读取某一行内容的实现方法
  2. urlencode urldecode
  3. 纯ASP上传图像文件到数据库的最佳例子
  4. repr方法字符串输出实例对象的值
  5. 散点图为什么是两组点_SAT数学易错点排雷之scatter plot
  6. 写地道的Python
  7. Spring 配置文件详解
  8. opencv读取摄像头实时流代码
  9. AIM Tech Round 5 (rated, Div. 1 + Div. 2)
  10. linux嵌入式开发从入门到精通
  11. 数据库多表查询时,返回值该如何接收问题
  12. 考研由考生编号估计学校,报考人数和专业
  13. 强大的达梦数据库图形界面工具
  14. Word学习简单笔记(2)文档排版与设计
  15. 服务器文件防止被扒,防止别人扒自己的网页方法
  16. oracle10如何扩asm磁盘组,在Oracle10g 新增ASM磁盘组
  17. [绍棠_Swift] SwiftyJSON的使用详解(附样例,用于JSON数据处理)
  18. 手机,电脑的蓝牙传送文件
  19. facetime 来电提醒_FaceTime应该比这更好
  20. 浅谈数据库用户表结构设计,第三方登录

热门文章

  1. Django从理论到实战(part4)--创建我们的第一个页面
  2. Hive入门之数据类型
  3. centos查看当前目录下文件大小_centos Linux 统计某个文件夹占用空间大小
  4. 使用 HTTP 缓存防止不必要的网络请求
  5. Angular 开发中的 Source Map
  6. SAP Freestyle UI5 和 SAP Fiori Elements 应用的区别
  7. SAP Spartacus table cell如何通过cxOutlet在运行时动态注入组件
  8. SAP Spartacus User Form里checkbox的设计原理
  9. SAP Cloud Platform Identity Authentication service
  10. OPA PropertyStrictEquals match check logic