websocket协议的实现(rfc 6455&7692)

websockets的Python项目详细描述


websockets

rtdpypi-vpypi-pyversionspypi-lpypi-wheelcirclecicodecov

什么是websockets

websockets是用于在中构建websocketserversclients的库 着重于正确性和简单性的python。

构建在python的标准异步i/o框架asyncio之上,它 提供了一个优雅的基于协程的api。

Documentation is available on Read the Docs.

以下是客户端发送和接收消息的方式:

#!/usr/bin/env pythonimportasyncioimportwebsocketsasyncdefhello(uri):asyncwithwebsockets.connect(uri)aswebsocket:awaitwebsocket.send("Hello world!")awaitwebsocket.recv()asyncio.get_event_loop().run_until_complete(hello('ws://localhost:8765'))

还有一个echo服务器:

#!/usr/bin/env pythonimportasyncioimportwebsocketsasyncdefecho(websocket,path):asyncformessageinwebsocket:awaitwebsocket.send(message)asyncio.get_event_loop().run_until_complete(websockets.serve(echo,'localhost',8765))asyncio.get_event_loop().run_forever()

看起来不错吧?

Get started with the tutorial!

为什么要使用websockets

websockets的发展由四个原则决定:

  1. 简单性:您只需要了解msg = await ws.recv()await ws.send(msg)websockets负责管理连接 所以你可以专注于你的申请。
  2. 健壮性websockets是为生产而构建的;例如 唯一一个在发行前handle backpressure correctly的库 在python社区中广为人知。
  3. 质量websockets经过严格测试。持续集成失败 低于100%分行覆盖率。它还通过了行业标准Autobahn Testsuite
  4. 性能:内存使用是可配置的。用c写的分机 加速昂贵的运营。它是为Linux、MacOS和 windows,并以wheel格式为每个系统和python版本打包。

文档是项目中的头等大事。去Read the Docs看看你自己。

为什么不使用websockets

  • 如果您更喜欢回调而不是协同路由:websockets被创建为 提供最佳的基于协同路由的API来管理 Python。为基于回调的api选择另一个库。
  • 如果您正在寻找混合http/websocket库:websocketsaims 作为RFC 6455:websocket协议的优秀实现 以及RFC 7692:websocket的压缩扩展。它对http的支持 是最小的-只够进行http健康检查。
  • 如果您想使用python 2:websockets基于asyncio构建 仅适用于Python3。websockets要求python≥3.6。

还有什么?

欢迎提供错误报告、补丁和建议!

若要报告安全漏洞,请使用Tidelift security contact。Tidelift将协调修复和披露。

如需其他信息,请打开issue或发送pull request

参与者必须坚持Contributor Covenant code of conduct

websocketsBSD license下释放。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java游戏socket网络路由器问题   使用Java构造函数初始化。newInstance(args),为什么会出现“args数错误”错误?   javascript当处理Java模式转换为Java脚本模式时,我的3D对象不会显示   java Memcached与Hibernate的集成   servlets如何在java中作为对象访问HttpServletResponse   由于NoClassDefFoundError,java XStream无法反序列化XML   性能远程Neo4j在JavaTinkerpop3Bolt设置中随时间变慢   不能使用java。util。正则表达式。模式,即使我在eclipse中使用jre8   带局部变量的selenium java流比较列表   java能否获得Android或iOS移动设备屏幕的实际尺寸?   java如何解决org。阿帕奇。hadoop。木卫一。无法将LongWritable强制转换为组织。阿帕奇。hadoop。木卫一。文本   java无法用字符串(变量)验证文本,不管它如何在静态文本“测试”中正常工作   如果使用java RandomAccessFile,如何更新数据   Java聚合中面临空指针异常   java查找类中定义的接口   java如何在Spring AMQP中侦听现有队列?   java有可能与PDO建立JDBC连接吗?   java使用ajax填充servelet的下拉列表   使用Azure java sdk更新用户和组属性   java找不到符号:LoggingEvent将log4j 1.2升级到2.8