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计算圆周率pi的方法
Jul 11 Python
python与C互相调用的方法详解
Jul 14 Python
如何在python字符串中输入纯粹的{}
Aug 22 Python
说说如何遍历Python列表的方法示例
Feb 11 Python
pyqt5 从本地选择图片 并显示在label上的实例
Jun 13 Python
浅谈Python type的使用
Nov 19 Python
使用IDLE的Python shell窗口实例详解
Nov 19 Python
Pytorch中膨胀卷积的用法详解
Jan 07 Python
解决Python pip 自动更新升级失败的问题
Feb 21 Python
Python读取pdf表格写入excel的方法
Jan 22 Python
Pycharm创建python文件自动添加日期作者等信息(步骤详解)
Feb 03 Python
Python实现信息管理系统
Jun 05 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
同一个表单 根据要求递交到不同页面的实现方法小结
2009/08/05 Javascript
json2.js的初步学习与了解
2011/10/06 Javascript
浅谈关于JavaScript的语言特性分析
2013/04/11 Javascript
在表单提交前进行验证的几种方式整理
2013/07/31 Javascript
解决jquery中美元符号命名冲突问题
2014/01/08 Javascript
用jquery模仿的a的title属性的例子
2014/10/22 Javascript
JavaScript制作简易的微信打飞机
2015/03/31 Javascript
学习JavaScript设计模式(代理模式)
2015/12/03 Javascript
js获取页面引用的css样式表中的属性值方法(推荐)
2016/08/19 Javascript
Angularjs 与 bower安装和使用详解
2017/05/11 Javascript
微信小程序-滚动消息通知的实例代码
2017/08/03 Javascript
一篇文章让你彻底弄懂JS的事件冒泡和事件捕获
2017/08/14 Javascript
vue 动态表单开发方法案例详解
2019/12/02 Javascript
使用React-Router实现前端路由鉴权的示例代码
2020/07/26 Javascript
Vue基于iview table展示图片实现点击放大
2020/08/05 Javascript
前端vue如何使用高德地图
2020/11/05 Javascript
Antd-vue Table组件添加Click事件,实现点击某行数据教程
2020/11/17 Javascript
JavaScript实现弹出窗口效果
2020/12/09 Javascript
浅谈Python数据类型判断及列表脚本操作
2016/11/04 Python
Python 处理文件的几种方式
2019/08/23 Python
详解用Pytest+Allure生成漂亮的HTML图形化测试报告
2020/03/31 Python
Python __slots__的使用方法
2020/11/15 Python
pytorch下的unsqueeze和squeeze的用法说明
2021/02/06 Python
CSS Grid布局教程之什么是网格布局
2014/12/30 HTML / CSS
英国森林假期:Forest Holidays
2021/01/01 全球购物
Java平台和其他软件平台有什么不同
2015/06/05 面试题
公司办公室岗位职责
2014/03/19 职场文书
出生公证委托书
2014/04/03 职场文书
小学生校园广播稿
2014/09/28 职场文书
2014年学校卫生工作总结
2014/11/20 职场文书
2014年终工作总结范本
2014/12/15 职场文书
婚礼男方父母答谢词
2015/09/29 职场文书
2016年10月份红领巾广播稿
2015/12/21 职场文书
Vue中插槽slot的使用方法与应用场景详析
2021/06/08 Vue.js
我的收音机情缘
2022/04/05 无线电
Win11 25163.1010更新补丁KB5016904推送,测试服务验证管道(附更新修复汇总)
2022/07/23 数码科技