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自定义类并使用的方法
May 07 Python
python开发之for循环操作实例详解
Nov 12 Python
全面了解Python的getattr(),setattr(),delattr(),hasattr()
Jun 14 Python
详解python3百度指数抓取实例
Dec 12 Python
Python实现网站注册验证码生成类
Jun 08 Python
python实现报表自动化详解
Nov 16 Python
获取python的list中含有重复值的index方法
Jun 27 Python
Python的argparse库使用详解
Oct 09 Python
python之验证码生成(gvcode与captcha)
Jan 02 Python
Python图像处理之图片文字识别功能(OCR)
Jul 30 Python
Opencv求取连通区域重心实例
Jun 04 Python
用python对excel查重
Dec 07 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判断指定时间段的2个方法
2014/03/14 PHP
php实现指定字符串中查找子字符串的方法
2015/03/17 PHP
分享PHP守护进程类
2015/12/30 PHP
php使用QueryList轻松采集js动态渲染页面方法
2018/09/11 PHP
PHP模糊查询技术实例分析【附源码下载】
2019/03/07 PHP
jquery 表单下所有元素的隐藏
2009/07/25 Javascript
利用jQuary实现文字浮动提示效果示例代码
2013/12/26 Javascript
js登录弹出层特效
2014/03/07 Javascript
JavaScript 异常处理 详解
2015/02/06 Javascript
JavaScript中的分号插入机制详细介绍
2015/02/11 Javascript
jquery实现简单实用的打分程序实例
2015/07/23 Javascript
noty ? jQuery通知插件全面解析
2016/05/18 Javascript
js中 计算两个日期间的工作日的简单实例
2016/08/08 Javascript
JS对象深度克隆实例分析
2017/03/16 Javascript
详解js的视频和音频采集
2018/08/09 Javascript
在layer弹层layer.prompt中,修改placeholder的实现方法
2019/09/27 Javascript
正确理解python中的关键字“with”与上下文管理器
2017/04/21 Python
基于python爬虫数据处理(详解)
2017/06/10 Python
python实现上传下载文件功能
2020/11/19 Python
python 打印直角三角形,等边三角形,菱形,正方形的代码
2017/11/21 Python
浅谈python中拼接路径os.path.join斜杠的问题
2018/10/23 Python
Python3.6中Twisted模块安装的问题与解决
2019/04/15 Python
python实现大文件分割与合并
2019/07/22 Python
Python类的动态绑定实现原理
2020/03/21 Python
python3注册全局热键的实现
2020/03/22 Python
OpenCV4.1.0+VS2017环境配置的方法步骤
2020/07/09 Python
Python3中对json格式数据的分析处理
2021/01/28 Python
后勤部长岗位职责
2013/12/14 职场文书
致跳高运动员广播稿
2014/01/13 职场文书
社区娱乐活动方案
2014/08/21 职场文书
酒店员工管理制度
2015/08/05 职场文书
2019年描写人生经典诗句大全
2019/07/08 职场文书
《天使的翅膀》读后感3篇
2019/12/20 职场文书
MySQL 全文检索的使用示例
2021/06/07 MySQL
PHP实现两种排课方式
2021/06/26 PHP