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 相关文章推荐
Python3中的2to3转换工具使用示例
Jun 12 Python
使用Python下载歌词并嵌入歌曲文件中的实现代码
Nov 13 Python
Python使用Pandas库实现MySQL数据库的读写
Jul 06 Python
Win10系统下安装labelme及json文件批量转化方法
Jul 30 Python
centos7之Python3.74安装教程
Aug 15 Python
Python测试线程应用程序过程解析
Dec 31 Python
python itsdangerous模块的具体使用方法
Feb 17 Python
IntelliJ 中配置 Anaconda的过程图解
Jun 01 Python
浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack
Jun 23 Python
Python Flask异步发送邮件实现方法解析
Aug 01 Python
如何利用Python实现一个论文降重工具
Jul 09 Python
Python函数式编程中itertools模块详解
Sep 15 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
收听困难?教您超简便短波广播抗干扰方法!
2021/03/01 无线电
Windows IIS PHP 5.2 安装与配置方法
2009/06/08 PHP
我的php学习笔记(毕业设计)
2012/02/21 PHP
PHP新手用的Insert和Update语句构造类
2012/03/31 PHP
详解Laravel服务容器的绑定与解析
2019/11/05 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
zShowBox 图片放大展示jquery版 兼容性
2011/09/24 Javascript
input 和 textarea 输入框最大文字限制的jquery插件
2011/10/27 Javascript
javascript setTimeout和setInterval计时的区别详解
2013/06/21 Javascript
Javascript简单实现面向对象编程继承实例代码
2015/11/27 Javascript
jQuery弹出下拉列表插件(实现kindeditor的@功能)
2016/08/16 Javascript
基于bootstrap的文件上传控件bootstrap fileinput
2016/12/23 Javascript
jQuery中页面返回顶部的方法总结
2016/12/30 Javascript
微信小程序动态显示项目倒计时效果
2017/06/13 Javascript
微信小程序页面生命周期详解
2018/01/31 Javascript
JavaScript选择排序算法原理与实现方法示例
2018/08/06 Javascript
axios 封装上传文件的请求方法
2018/09/26 Javascript
使用koa-log4管理nodeJs日志笔记的使用方法
2018/11/30 NodeJs
Vue.js如何使用Socket.IO的示例代码
2019/09/05 Javascript
微信小程序 轮播图实现原理及优化详解
2019/09/29 Javascript
vue 页面回退mounted函数不执行的解决方案
2020/07/26 Javascript
Win10下python 2.7.13 安装配置方法图文教程
2018/09/18 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
2019/08/23 Python
万得城电器土耳其网站:欧洲第一大电子产品零售商
2016/10/07 全球购物
香港钟表珠宝首饰商城:OneMallTime网摩间
2016/10/14 全球购物
马来西亚与新加坡长途巴士售票网站:BusOnlineTicket.com
2018/11/05 全球购物
进修护士自我鉴定
2013/10/14 职场文书
电气专业应届生求职信
2013/11/01 职场文书
信息技术专业大学生职业生涯规划书
2014/01/24 职场文书
伊琍体标语
2014/06/25 职场文书
房地产销售经理岗位职责
2015/02/02 职场文书
小学副班长竞选稿
2015/11/21 职场文书
小学音乐课教学反思
2016/02/18 职场文书
公文写作:教你写“建议书”
2019/05/07 职场文书
2019财务转正述职报告
2019/06/27 职场文书
Mysql事务索引知识汇总
2022/03/17 MySQL