python-3.x - python3 的 BufferedProtocol 是 TCP 的抽象吗?还是它太低级以至于我也必须实现 TCP 的东西?
问题描述
我指的是这个:https ://docs.python.org/3/library/asyncio-protocol.html#asyncio.BufferedProtocol
我还没有在任何地方看到这个问题的答案,我想在编写任何代码之前知道答案。
这似乎暗示它是asyncio.Protocol
(对于 TCP)的修改,但看到 BufferedProtocol 似乎没有提到 TCP,这让我担心我必须应对乱序数据包等。
非常感谢!
解决方案
BufferedProtocol
不是基于 TCP 的协议,它是用于自定义实现异步协议的接口(基类) ,特别是那些试图最小化复制量的协议。文档字符串提供了更多详细信息:
的想法
BufferedProtocol
是它允许手动分配和控制接收缓冲区。然后事件循环可以使用协议提供的缓冲区来避免不必要的数据复制。这可以显着提高接收大量数据的协议的性能。复杂的协议只能在创建时分配一次缓冲区。
目前,asyncio 附带的协议都不是从 派生的BufferedProtocol
,因此用例是需要实现高吞吐量的用户代码 - 有关详细信息,请参阅BPO 问题和链接的邮件列表帖子。
似乎没有提到 TCP,因为
BufferedProtocol
它让我担心我必须应对乱序数据包等。
除非您正在编写自定义的低级异步代码,否则您根本不应该关心BufferedProtocol
。常规异步 TCP 代码调用函数,例如open_connection
or start_server
,这两个函数都以通常的方式(使用缓冲区、处理错误等)在 TCP 套接字之上提供流抽象。
推荐阅读
- python - 在 Log in Python 的行中搜索两个条件
- java - camera2 停止使用 CameraDevice.StateCallBack onError 值 4
- python - 解析包含文件名的文件并忽略具有多个点字符的条目?
- javascript - 点击时获得相同的 Google Maps Marker id
- python - 不,Feedparser 5.2.1 没有在 Python 中安装/工作(对我来说)
- node.js - 当我为 NodeJS 使用 http-server 时如何访问 index.html 页面?
- windows - Powershell Loop 不等待命令完成
- jquery - 如何从两个不同的复选框值更改跨度文本
- c - 为什么允许`typedef struct xx`?
- javascript - Padding 防止元素渲染,Chrome v75 中的 Flexbox 错误