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抓取网页正文的源码
Jun 11 Python
python进阶教程之异常处理
Aug 30 Python
Python 包含汉字的文件读写之每行末尾加上特定字符
Dec 12 Python
Python3下错误AttributeError: ‘dict’ object has no attribute’iteritems‘的分析与解决
Jul 06 Python
Python中实例化class的执行顺序示例详解
Oct 14 Python
python 阶乘累加和的实例
Feb 01 Python
Python面向对象程序设计之类的定义与继承简单示例
Mar 18 Python
让你Python到很爽的加速递归函数的装饰器
May 26 Python
Django中的用户身份验证示例详解
Aug 07 Python
用python3读取python2的pickle数据方式
Dec 25 Python
Python pip安装第三方库实现过程解析
Jul 09 Python
安装pytorch时报sslerror错误的解决方案
May 17 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
Win2003服务器安全加固设置--进一步提高服务器安全性
2007/05/23 PHP
php后门URL的防范
2013/11/12 PHP
PHP定时更新程序设计思路分享
2014/06/10 PHP
PHP写日志的实现方法
2014/11/05 PHP
基于PHP给大家讲解防刷票的一些技巧
2015/11/18 PHP
PHP模糊查询的实现方法(推荐)
2016/09/06 PHP
弹出模态框modal的实现方法及实例
2017/09/19 PHP
详解使用php-cs-fixer格式化代码
2020/09/16 PHP
js Event对象的5种坐标
2011/09/12 Javascript
JS控件的生命周期介绍
2012/10/22 Javascript
JS幻灯片可循环播放可平滑旋转带滚动导航(自写)
2013/08/05 Javascript
JQuery处理json与ajax返回JSON实例代码
2014/01/03 Javascript
javascript实现自动填写表单实例简析
2015/12/02 Javascript
JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法详解
2016/06/14 Javascript
JavaScript 随机验证码的生成实例代码
2016/09/22 Javascript
原生JS轮播图插件
2017/02/09 Javascript
Vue中axios的封装(报错、鉴权、跳转、拦截、提示)
2019/08/20 Javascript
原生JS实现留言板
2020/03/26 Javascript
Vue+scss白天和夜间模式切换功能的实现方法
2021/01/05 Vue.js
使用Python脚本在Linux下实现部分Bash Shell的教程
2015/04/17 Python
Python中IPYTHON入门实例
2015/05/11 Python
简单讲解Python中的字符串与字符串的输入输出
2016/03/13 Python
python处理html转义字符的方法详解
2016/07/01 Python
Python 基础知识之字符串处理
2017/01/06 Python
Python利用matplotlib.pyplot绘图时如何设置坐标轴刻度
2018/04/09 Python
Python qqbot 实现qq机器人的示例代码
2019/07/11 Python
python 项目目录结构设置
2020/02/14 Python
党校自我鉴定范文
2013/10/02 职场文书
电焊工工作岗位职责
2014/02/06 职场文书
大学学生会竞选演讲稿
2014/04/25 职场文书
国庆促销活动总结
2014/08/29 职场文书
幼儿园教师节感谢信
2015/01/23 职场文书
校运会宣传稿大全
2015/07/23 职场文书
素质教育培训心得体会
2016/01/19 职场文书
简单介绍Python的第三方库yaml
2021/06/18 Python
python解析照片拍摄时间进行图片整理
2022/07/23 Python