首页 > 解决方案 > python3 的 BufferedProtocol 是 TCP 的抽象吗?还是它太低级以至于我也必须实现 TCP 的东西?

问题描述

我指的是这个:https ://docs.python.org/3/library/asyncio-protocol.html#asyncio.BufferedProtocol

我还没有在任何地方看到这个问题的答案,我想在编写任何代码之前知道答案。

这似乎暗示它是asyncio.Protocol(对于 TCP)的修改,但看到 BufferedProtocol 似乎没有提到 TCP,这让我担心我必须应对乱序数据包等。

非常感谢!

标签: python-3.xtcpstreampython-asyncio

解决方案


BufferedProtocol不是基于 TCP 的协议,它是用于自定义实现异步协议的接口(基类) ,特别是那些试图最小化复制量的协议。文档字符串提供了更多详细信息:

的想法BufferedProtocol是它允许手动分配和控制接收缓冲区。然后事件循环可以使用协议提供的缓冲区来避免不必要的数据复制。这可以显着提高接收大量数据的协议的性能。复杂的协议只能在创建时分配一次缓冲区。

目前,asyncio 附带的协议都不是从 派生的BufferedProtocol,因此用例是需要实现高吞吐量的用户代码 - 有关详细信息,请参阅BPO 问题和链接的邮件列表帖子

似乎没有提到 TCP,因为BufferedProtocol它让我担心我必须应对乱序数据包等。

除非您正在编写自定义的低级异步代码,否则您根本不应该关心BufferedProtocol。常规异步 TCP 代码调用函数,例如open_connectionor start_server,这两个函数都以通常的方式(使用缓冲区、处理错误等)在 TCP 套接字之上提供流抽象。


推荐阅读