websockets官方文档
初步入门可以先看这个大致了解Python3+WebSockets实现WebSocket通信

现在越发觉得学一个东西还是得看官方文档,讲的细,很多一般博客没说明白的地方官方文档都会说明(其实基本95%的博客也都是从官方文档抄代码,阉割一部分内容给你看的,比如我这篇)

1、服务器端demo

#!/usr/bin/env python# WS server exampleimport asyncio
import websocketsasync def hello(websocket, path):name = await websocket.recv()print(f"< {name}")greeting = f"Hello {name}!"await websocket.send(greeting)print(f"> {greeting}")start_server = websockets.serve(hello, "localhost", 8765)asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

websockets每检测到有一个WebSocket连接都会执行一次协程hello。当协程执行完毕,这个连接也被close关闭了。

2、客户端demo

#!/usr/bin/env python# WS client exampleimport asyncio
import websocketsasync def hello():uri = "ws://localhost:8765"async with websockets.connect(uri) as websocket:name = input("What's your name? ")await websocket.send(name)print(f"> {name}")greeting = await websocket.recv()print(f"< {greeting}")asyncio.get_event_loop().run_until_complete(hello())

其实async with在这里的用法和with open(file)挺类似的,这里使用websockets.connect作为一个异步上下文管理器,来确保协程hello退出时,websockets的连接也被关闭。这种写法也是官方推荐的在客户端正确关闭一个连接的写法。

3、循环send、recv数据的demo

recv数据

async def consumer_handler(websocket, path):async for message in websocket:await consumer(message)

send数据

async def producer_handler(websocket, path):while True:message = await producer()await websocket.send(message)

recv、send数据

async def handler(websocket, path):consumer_task = asyncio.ensure_future(consumer_handler(websocket, path))producer_task = asyncio.ensure_future(producer_handler(websocket, path))done, pending = await asyncio.wait([consumer_task, producer_task],return_when=asyncio.FIRST_COMPLETED,)for task in pending:task.cancel()

【python】websockets相关推荐

  1. 【python】图像映射:单应性变换与图像扭曲

    [python]图像映射:单应性变换与图像扭曲 单应性变换(Homography) 图像扭曲(仿射变换) 图中图 分段仿射扭曲 单应性变换(Homography) 单应性变换(Homography)即 ...

  2. 【Python】函数图像绘制:二维图像、三维图像、散点图、心形图

    [Python]函数图像绘制:二维图像.三维图像.散点图.心形图 所有需要用的包 二维图像 三维图像 散点图绘制 心形图绘制 所有需要用的包 from mpl_toolkits.mplot3d imp ...

  3. 【python】 OSError:sift not found 问题解决

    [python] OSError: XXXX.sift not found 问题解决 在python环境下通过sift描述子对图像进行特征匹配时出现错误(心累):mpire.sift not foun ...

  4. 【Python】Python中令人头疼的变量作用域问题,终于弄清楚了

    [Python]Python中令人头疼的变量作用域问题,终于弄清楚了_fengdu78的博客-CSDN博客 [Python]Python中令人头疼的变量作用域问题,终于弄清楚了_fengdu78的博客 ...

  5. 【Python】将字典(dict)转化为Dataframe

    [Python]将字典(dict)转化为Dataframe_张欣的博客-CSDN博客_python字典转dataframe dictory = {'a':1,'b':2} df = pd.DataFr ...

  6. 【Python】Numpy扩充数组函数之repeat和tile用法

    2019独角兽企业重金招聘Python工程师标准>>> [Python]Numpy扩充数组函数之repeat和tile用法,有需要的朋友可以参考下. 用repeat和tile扩充数组 ...

  7. 11210怎么等于24_【Python】鸡兔同笼怎么“妙解”?

    上一节: <<[python] 学了编程.我写的第二个游戏...>> 鸡兔同笼,是中国古代著名典型趣题之一,记载于<孙子算经>之中.鸡兔同笼问题,是小学奥数的常见题 ...

  8. 【Python】解决Django Admin管理界面样式表(CSS Style)丢失问题

    [Python]解决Django Admin管理界面样式表(CSS Style)丢失问题 参考文章: (1)[Python]解决Django Admin管理界面样式表(CSS Style)丢失问题 ( ...

  9. 【python】-- try except (异常捕获)、断言

    [python]-- try except (异常捕获).断言 参考文章: (1)[python]-- try except (异常捕获).断言 (2)https://www.cnblogs.com/ ...

  10. keil obj 文件 结构_【Python】数据分析前的入门教程 Python For Everybody P2:数据结构...

    这是密歇根大学课程Python For Everybody总结的P2部分.课程总结P1部分的地址如下: P1: 零基础程序设计(Python 入门) carolinezhq:[Python]数据分析前 ...

最新文章

  1. NR 5G 零基础看5G
  2. python写出的程序如何给别人使用-涨姿势!这些小技巧让小白也可以写出更优雅的Python代码!...
  3. 第四阶段 04_Linux基本操作
  4. js截屏 video_js获取视频截图
  5. Windows 安装Angular CLI
  6. 关于C#打包部署文件夹问题
  7. WPF 自己动手来做安装卸载程序
  8. 根据坐标采色修改背景
  9. Win10 安装 .NetFramework 4.7 (SourceTree)
  10. .pdf文件通过java拷贝,java复制pdf而且往pdf文件中添加内容
  11. chrome(谷歌浏览器)固定到任务栏,点击之后出现两个图标-原因及解决办法
  12. 世界十大极限运动是什么
  13. Spring的AOP的基于AspectJ注解开发——Spring的JDBC的模板的使用——Spring的事务管理
  14. 前端学习2-JavaScript
  15. 数据结构如何申请一个空间的队列_如何用鞋柜来作为隔断,隔出一个玄关空间...
  16. 获得旅行青蛙无限三叶草方法及apk
  17. 林业工程抗旱造林技术
  18. 找论文的几个实用网站
  19. 学日语、记单词是有规律的(转载)
  20. 佳能Canon LBP7700C 打印机驱动

热门文章

  1. hmcl启动器java下载_HMCL启动器
  2. xp系统升级到win7系统打印驱动的安装
  3. C# 使用iTextSharp中间件打印PDF
  4. echarts循环图表
  5. [TCL]Tcl语言基礎教程(一)
  6. Diamond软件的使用--(1)软件安装及配置
  7. 关于tcp/udp网络调试助手错误提示
  8. clion配置opencv
  9. 数据包络分析法(DEA)_2
  10. cocoscreator 资源加密