您现在的位置是:首页 > 正文

websocket.WebSocketApp

2024-01-31 00:20:20阅读 0

WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。

WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

在 WebSocket API 中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。

现在,很多网站为了实现推送技术,所用的技术都是 Ajax 轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的带宽等资源。

HTML5 定义的 WebSocket 协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯

websocket中就有建立连接connect、发送消息send等函数可供使用,但是websocket.WebSocketApp将这些都封装好了,只用在实例化的时候传入自定义函数即可,更方便。因此这里选择使用websocket.WebSocketApp来模拟客户行为。

WebSocketApp也是websocket中的一个类。要使用WebSocketApp中的回调函数需要传入一系列的可调用对象。在实例化该类时传入构造函数中的on_open、on_message、on_error就需要传入一系列的可调用对象,例如自定义的函数。

以下是websocket.WebSocketApp类中的构造函数的摘录,简单介绍一下各个传入值的说明。

def init(self, url, header=[],

on_open=None, on_message=None, on_error=None,

on_close=None, on_ping=None, on_pong=None,

on_cont_message=None,

keep_running=True,get_mask_key=None, cookie=None,

subprotocols=None,

on_data=None)

(1)url: websocket的地址。

(2)header: 客户发送websocket握手请求的请求头,{‘head1:value1’,‘head2:value2’}。

(3)on_open:在建立Websocket握手时调用的可调用对象,这个方法只有一个参数,就是该类本身。

(4)on_message:这个对象在接收到服务器返回的消息时调用。有两个参数,一个是该类本身,一个是我们从服务器获取的字符串(utf-8格式)。

(5)on_error:这个对象在遇到错误时调用,有两个参数,第一个是该类本身,第二个是异常对象。

(6)on_close:在遇到连接关闭的情况时调用,参数只有一个,就是该类本身。

(7)on_cont_message:这个对象在接收到连续帧数据时被调用,有三个参数,分别是:类本身,从服务器接受的字符串(utf-8),连续标志。

(8)on_data:当从服务器接收到消息时被调用,有四个参数,分别是:该类本身,接收到的字符串(utf-8),数据类型,连续标志。

(9)keep_running:一个二进制的标志位,如果为True,这个app的主循环将持续运行,默认值为True。

(10)get_mask_key:用于产生一个掩码。

(11)subprotocols:一组可用的子协议,默认为空。

除此之外,还有on_ping,on_pong等,详细内容可以查看源代码。

另外说明一下该类中的一个方法叫run_forever()。Run_forever是一个无限循环,只要这个websocket连接未断开,这个循环就会一直进行下去。如果在实现websocket连接时使用了心跳包,可以在这个函数中传入心跳包的间隔,格式如下:

ws.run_forever(ping_interval=SOCKET_PING_INTERVAL,

           timeout=SOCKET_TIMEOUT)

网站文章

  • java读取文件 16进制_Java:文件到十六进制?

    小编典典你真幸运。我几个月前不得不这样做。这是一个精简版,需要从命令行获取两个参数。命令行参数都是文件名…第一个是输入文件,第二个是输出文件。输入文件以二进制形式读取,输出文件以ASCII十六进制形式...

    2024-01-31 00:20:13
  • mysql 系统库(一) —— 权限系统表与访问权限控制系统

    系列文章参考自《MySQL 性能优化金字塔法则》,删除了书里重复说明和过于复杂的一些解释,完整版请参考原书。 前一篇有提到,information_schema 下的表都是非持久的,重启数据就会丢失,那么这些数据来自哪里呢?一部分来自ibdata共享表空间中的数据字典表的映射,而另一部分就来自mysql 系统库下的持久表。 mysql 系统库中包含以下类型的表: 权限系统表与访问权限...

    2024-01-31 00:20:06
  • java -jar 指定端口_Java可视化故障处理工具远程调试配置

    java -jar 指定端口_Java可视化故障处理工具远程调试配置

    本文介绍的几种工具适用于监控与分析Jvm堆内内存、栈、垃圾回收的状况。对于堆外内存的情况,只适用于DirectByteBuffer类,不适用于Unsafe类。JConsoleVisualVMJprof...

    2024-01-31 00:19:40
  • 机器人学习之项目- Project4:Home Sevice Robot

    机器人学习之项目- Project4:Home Sevice Robot

    这个项目的下一个任务是选择两个不同的目标,根据目标确定方向,以测试机器人达到的能力。我们将这些目标称为取货区和卸货区区域。该部分仅用于测试目的,以确保机器人能够在自主命令它向这些位置移动之前,可到达这...

    2024-01-31 00:19:33
  • 微服务访问安全设计方案全探索

    微服务访问安全设计方案全探索

    今天给大家带来的是 数人云工程师文权在高效运维线上群的分享实录。从传统单体应用架构到微服务架构,安全问题一直是人们关注的重点,文权与大家分享了关于微服务访问安全设计方案的探索与实践。 我们首先从传统单体应用架构下的访问安全设计说起,然后分析现代微服务架构下,访问安全涉及的原则,接着讨论目前常用的几种微服务架构下的访问安全设计方案。最后,详析Spring Cloud微服务架构下如何解决访问安...

    2024-01-31 00:19:27
  • 【计算机网络】TCP / IP 四层协议

    【计算机网络】TCP / IP 四层协议

    TCP / IP 是一个四层的体系结构,它从上至下包含应用层、运输层、网际层(强调本层可解决不同网络的互连问题)、网络接口层,在学习时,可结合OSI 和 TCP / IP 的特点,采用一种仅有五层的体系结构。

    2024-01-31 00:19:20
  • Android kotlin:json自动生成bean

    1. 取得json字符串 { "memo_id": 351, "items": [{ "language": "en",...

    2024-01-31 00:18:51
  • vue3.0中echarts实现中图地图的省份切换,并解决多次切换后地图卡死的情况

    vue3.0中echarts实现中图地图的省份切换,并解决多次切换后地图卡死的情况

    实现中国地图的省份切换

    2024-01-31 00:18:44
  • openssl运行出现 no OPENSSL_Applink解决办法

    openssl运行出现 no OPENSSL_Applink解决办法

    在使用openssl里面的test目录下ecdhtest.c运行时出错,如下: 百度到解决办法http://www.bubuko.com/infodetail-1082732.html,但是对我来说直接这么写错误还是没解决,原来是extern “C”语法写错了,语法参照这个博客:http://blog.csdn.net/daydreamingboy/article/details/877

    2024-01-31 00:18:37
  • 数据结构和算法:预排序遍历树算法(MPTT)

    数据结构和算法:预排序遍历树算法(MPTT)

    一、多级分类问题 在实际开发的过程中,会经常遇到多级分类的问题。譬如,导航栏、菜单、商品种类、多级联动、字典表等等的多级分类问题。这时可以新增一个 pid 字段进行数据关联,它本质上其实就是一棵树。树...

    2024-01-31 00:18:06