Python WebSocket长连接心跳与短连接的示例


Posted in Python onNovember 24, 2020

安装

pip install websocket-client

先来看一下,长连接调用方式:

ws = websocket.WebSocketApp("ws://echo.websocket.org/",
               on_message = on_message,
               on_error = on_error,
               on_close = on_close)
  ws.on_open = on_open
  ws.run_forever()

 长连接,参数介绍:

(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:一组可用的子协议,默认为空。

长连接关键方法:ws.run_forever(ping_interval=60,ping_timeout=5)

 如果不断开关闭websocket连接,会一直阻塞下去。另外这个函数带两个参数,如果传的话,启动心跳包发送。

ping_interval:自动发送“ping”命令,每个指定的时间(秒),如果设置为0,则不会自动发送。

ping_timeout:如果没有收到pong消息,则为超时(秒)。

ws.run_forever(ping_interval=60,ping_timeout=5)#ping_interval心跳发送间隔时间#ping_timeout 设置,发送ping到收到pong的超时时间

我们看源代码,会发现这样一断代码:

ping的超时时间,要大于ping间隔时间

if not ping_timeout or ping_timeout <= 0:
      ping_timeout = None
    if ping_timeout and ping_interval and ping_interval <= ping_timeout:
      raise WebSocketException("Ensure ping_interval > ping_timeout")

长连接:

示例1:

import websocket
try:
  import thread
except ImportError:
  import _thread as thread
import time

def on_message(ws, message):
  print(message)

def on_error(ws, error):
  print(error)

def on_close(ws):
  print("### closed ###")


def on_open(ws):
  def run(*args):
    ws.send("hello1")
    time.sleep(1)
    ws.close()
  thread.start_new_thread(run,())

if __name__ == "__main__":
  websocket.enableTrace(True)
  ws = websocket.WebSocketApp("ws://echo.websocket.org/",
               on_message = on_message,
               on_error = on_error,
               on_close = on_close)
  ws.on_open = on_open
  ws.run_forever(ping_interval=60,ping_timeout=5)

示例2:

import websocket
from threading import Thread
import time
import sys


class MyApp(websocket.WebSocketApp):
  def on_message(self, message):
    print(message)

  def on_error(self, error):
    print(error)

  def on_close(self):
    print("### closed ###")

  def on_open(self):
    def run(*args):
      for i in range(3):
        # send the message, then wait
        # so thread doesn't exit and socket
        # isn't closed
        self.send("Hello %d" % i)
        time.sleep(1)

      time.sleep(1)
      self.close()
      print("Thread terminating...")

    Thread(target=run).start()


if __name__ == "__main__":
  websocket.enableTrace(True)
  if len(sys.argv) < 2:
    host = "ws://echo.websocket.org/"
  else:
    host = sys.argv[1]
  ws = MyApp(host)
  ws.run_forever()

短连接:

from websocket import create_connection
ws = create_connection("ws://echo.websocket.org/")
print("Sending 'Hello, World'...")
ws.send("Hello, World")
print("Sent")
print("Receiving...")
result = ws.recv()
print("Received '%s'" % result)
ws.close()

以上就是Python WebSocket长连接心跳与短连接的示例的详细内容,更多关于Python WebSocket连接的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python概率计算器实例分析
Mar 25 Python
Python中使用PyQt把网页转换成PDF操作代码实例
Apr 23 Python
Python基于动态规划算法计算单词距离
Jul 25 Python
快速了解Python相对导入
Jan 12 Python
python3.4.3下逐行读入txt文本并去重的方法
Apr 29 Python
tensorflow实现逻辑回归模型
Sep 08 Python
使用Python3内置文档高效学习以及官方中文文档
May 19 Python
python 执行终端/控制台命令的例子
Jul 12 Python
Python selenium环境搭建实现过程解析
Sep 08 Python
python 爬取免费简历模板网站的示例
Sep 27 Python
python 如何用terminal输入参数
May 25 Python
LyScript实现绕过反调试保护的示例详解
Aug 14 Python
Python 利用Entrez库筛选下载PubMed文献摘要的示例
Nov 24 #Python
python实现企业微信定时发送文本消息的示例代码
Nov 24 #Python
python爬虫快速响应服务器的做法
Nov 24 #Python
PyCharm Community安装与配置的详细教程
Nov 24 #Python
python3爬虫GIL修改多线程实例讲解
Nov 24 #Python
Django URL参数Template反向解析
Nov 24 #Python
python3爬虫中引用Queue的实例讲解
Nov 24 #Python
You might like
社区(php&amp;&amp;mysql)二
2006/10/09 PHP
基于PHP array数组的教程详解
2013/06/05 PHP
PHP实现查询两个数组中不同元素的方法
2016/02/23 PHP
Symfony2创建基于域名的路由相关示例
2016/11/14 PHP
PHP SESSION机制的理解与实例
2019/03/22 PHP
Javascript实例教程(19) 使用HoTMetal(3)
2006/12/23 Javascript
ASP.NET中使用后端代码注册脚本 生成JQUERY-EASYUI的界面错位的解决方法
2010/06/12 Javascript
JavaScript Array Flatten 与递归使用介绍
2011/10/30 Javascript
jQuery弹出层始终垂直居中相对于屏幕或当前窗口
2013/04/01 Javascript
JQuery操作iframe父页面与子页面的元素与方法(实例讲解)
2013/11/20 Javascript
指定区域的图片自动按比例缩小的js代码(防止页面被图片撑破)
2014/02/21 Javascript
jQuery团购倒计时特效实现方法
2015/05/07 Javascript
基于jQuery实现选取月份插件附源码下载
2015/12/28 Javascript
jquery拖拽效果完整实例(附demo源码下载)
2016/01/14 Javascript
JavaScript实现相册弹窗功能(zepto.js)
2016/06/21 Javascript
js enter键激发事件实例代码
2016/08/17 Javascript
JavaScript中数组slice和splice的对比小结
2016/09/22 Javascript
详解使用grunt完成requirejs的合并压缩和js文件的版本控制
2017/03/02 Javascript
js实现带进度条提示的多视频上传功能
2020/12/13 Javascript
Vue2.0中集成UEditor富文本编辑器的方法
2018/03/03 Javascript
解决echarts echarts数据动态更新和dataZoom被重置问题
2020/07/20 Javascript
javascript实现时间日期的格式化的方法汇总
2020/08/06 Javascript
解决vant框架做H5时踩过的坑(下拉刷新、上拉加载等)
2020/11/11 Javascript
Python中操作MySQL入门实例
2015/02/08 Python
python中使用mysql数据库详细介绍
2015/03/27 Python
Python 内置变量和函数的查看及说明介绍
2019/12/25 Python
Kmeans均值聚类算法原理以及Python如何实现
2020/09/26 Python
python爬虫利器之requests库的用法(超全面的爬取网页案例)
2020/12/17 Python
浅谈CSS3特性查询(Feature Query: @supports)功能简介
2017/07/31 HTML / CSS
意大利专业化妆品品牌:KIKO MILANO
2017/02/01 全球购物
上班睡觉检讨书
2014/01/09 职场文书
消防标语大全
2014/06/07 职场文书
社区志愿服务活动感想
2015/08/07 职场文书
2016年秋季开学典礼新闻稿
2015/11/25 职场文书
spring cloud eureka 服务启动失败的原因分析及解决方法
2022/03/17 Java/Android
《传颂之物 虚伪的假面》BD发售宣传CM公开
2022/04/04 日漫