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程序与C程序的结合使用
Apr 07 Python
详细分析python3的reduce函数
Dec 05 Python
django 开发忘记密码通过邮箱找回功能示例
Apr 17 Python
TensorFlow实现Logistic回归
Sep 07 Python
python数据处理 根据颜色对图片进行分类的方法
Dec 08 Python
python二维码操作:对QRCode和MyQR入门详解
Jun 24 Python
Pandas中DataFrame的分组/分割/合并的实现
Jul 16 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
Feb 27 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
Mar 11 Python
浅谈Python中的字符串
Jun 10 Python
python利用后缀表达式实现计算器功能
Feb 22 Python
详解pandas apply 并行处理的几种方法
Feb 24 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
discuz authcode 经典php加密解密函数解析
2020/07/12 PHP
Thinkphp的volist标签嵌套循环使用教程
2014/07/08 PHP
Symfony学习十分钟入门经典教程
2016/02/03 PHP
thinkphp5.1 框架钩子和行为用法实例分析
2020/05/25 PHP
javascript之对系统的toFixed()方法的修正
2007/05/08 Javascript
node.js中的fs.lstatSync方法使用说明
2014/12/16 Javascript
javascript制作的cookie封装及使用指南
2015/01/02 Javascript
javascript实现无缝上下滚动特效
2015/12/16 Javascript
JS实现表单验证功能(验证手机号是否存在,验证码倒计时)
2016/10/11 Javascript
JavaScript生成.xls文件的代码
2016/12/22 Javascript
javascript中json基础知识详解
2017/01/19 Javascript
javascript完美实现给定日期返回上月日期的方法
2017/06/15 Javascript
js与jQuery实现获取table中的数据并拼成json字符串操作示例
2018/07/12 jQuery
JavaScript实现多态和继承的封装操作示例
2018/08/20 Javascript
详解vue2.0 资源文件assets和static的区别
2018/11/27 Javascript
jQuery实现的简单日历组件定义与用法示例
2018/12/24 jQuery
Windows下安装 node 的版本控制工具 nvm
2020/02/06 Javascript
在Django的视图中使用数据库查询的方法
2015/07/16 Python
python爬虫入门教程--利用requests构建知乎API(三)
2017/05/25 Python
用python给自己做一款小说阅读器过程详解
2019/07/11 Python
Python3 合并二叉树的实现
2019/09/30 Python
使用Pyhton 分析酒店针孔摄像头
2020/03/04 Python
Python astype(np.float)函数使用方法解析
2020/06/08 Python
Python 使用 PyQt5 开发的关机小工具分享
2020/07/16 Python
HTML5 video 事件应用示例
2014/09/11 HTML / CSS
特罗佩亚包官方网站:Tropea
2017/01/03 全球购物
ZINVO手表官网:男士和女士手表
2019/03/10 全球购物
四年大学生活的个人自我评价
2013/12/11 职场文书
初级会计求职信范文
2014/02/15 职场文书
技术总监管理岗位职责
2014/03/09 职场文书
马智宇结婚主持词
2014/04/01 职场文书
争先创优心得体会
2014/09/12 职场文书
2015年超市员工工作总结
2015/05/04 职场文书
2015年感恩父亲节活动策划方案
2015/05/05 职场文书
2015年信息化建设工作总结
2015/07/23 职场文书
MySQL数据库中varchar类型的数字比较大小的方法
2021/11/17 MySQL