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 16 Python
python网络编程学习笔记(三):socket网络服务器
Jun 09 Python
Python version 2.7 required, which was not found in the registry
Aug 26 Python
使用Python开发windows GUI程序入门实例
Oct 23 Python
python命令行参数用法实例分析
Jun 25 Python
Django后台管理系统的图文使用教学
Jan 20 Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
Feb 29 Python
python3发送request请求及查看返回结果实例
Apr 30 Python
keras之权重初始化方式
May 21 Python
使用keras实现非线性回归(两种加激活函数的方式)
Jul 05 Python
Python环境使用OpenCV检测人脸实现教程
Oct 19 Python
Python3压缩和解压缩实现代码
Mar 01 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中session_unset与session_destroy的区别分析
2011/06/16 PHP
通过php快速统计某个数据库中每张表的数据量
2012/09/04 PHP
简单谈谈php中ob_flush和flush的区别
2014/11/27 PHP
javascript 获取表单file全路径
2009/12/31 Javascript
JavaScript中的undefined学习总结
2013/11/30 Javascript
jQuery将所有被选中的checkbox某个属性值连接成字符串的方法
2015/01/24 Javascript
使用nodejs开发cli项目实例
2015/06/03 NodeJs
解析Node.js基于模块和包的代码部署方式
2016/02/16 Javascript
JavaScript实现简单Tip提示框效果
2016/04/20 Javascript
利用Plupload.js解决大文件上传问题, 带进度条和背景遮罩层
2017/03/15 Javascript
微信小程序canvas写字板效果及实例
2017/06/15 Javascript
Canvas实现微信红包照片效果
2018/08/21 Javascript
vue拖拽组件使用方法详解
2018/12/01 Javascript
小程序页面动态配置实现方法
2019/02/05 Javascript
javascript严格模式详解(含严格模式与非严格模式的区别)
2019/11/12 Javascript
python使用BeautifulSoup分析网页信息的方法
2015/04/04 Python
Python函数式编程指南(一):函数式编程概述
2015/06/24 Python
Python cookbook(数据结构与算法)实现查找两个字典相同点的方法
2018/02/18 Python
python2.7 json 转换日期的处理的示例
2018/03/07 Python
Python趣味入门教程之循环语句while
2020/08/26 Python
Python+OpenCV检测灯光亮点的实现方法
2020/11/02 Python
基于Python实现粒子滤波效果
2020/12/01 Python
详解python使用金山词霸的翻译功能(调试工具断点的使用)
2021/01/07 Python
Canvas 像素处理之改变透明度的实现代码
2019/01/08 HTML / CSS
微信小程序canvas实现水平、垂直居中效果
2020/02/05 HTML / CSS
亚马逊海外购:亚马逊美国、英国、日本、德国直邮
2021/03/18 全球购物
数控专业毕业生自荐信范文
2014/03/04 职场文书
项目经理聘任书
2014/03/29 职场文书
环卫工人先进事迹材料
2014/06/02 职场文书
分公司总经理岗位职责
2014/07/30 职场文书
焦裕禄精神心得体会
2014/09/02 职场文书
平面设计师岗位职责
2014/09/18 职场文书
2014年全国爱牙日宣传活动方案
2014/09/21 职场文书
处级领导干部四风问题自我剖析材料
2014/09/29 职场文书
物价局领导班子四风问题整改措施
2014/10/26 职场文书
2019年中,最受大众欢迎的6本新书
2019/08/07 职场文书