我指的是:https://docs.python.org/3/library/asyncio-protocol.html#asyncio.BufferedProtocol
我在任何地方都没有看到这个问题的答案,我想在编写任何代码之前先知道答案。
[这似乎暗示它是对asyncio.Protocol
的修改(对于TCP),但是似乎BufferedProtocol似乎没有提到TCP,这让我担心我必须应对乱序数据包等。
非常感谢!
BufferedProtocol
不是基于TCP的协议,它是用于自定义实现asyncio protocols的interface(基类),尤其是那些试图尽量减少复制数量的协议。 docstring提供了更多详细信息:
BufferedProtocol
的想法是,它允许手动分配和控制接收缓冲区。然后,事件循环可以使用协议提供的缓冲区来避免不必要的数据复制。对于接收大量数据的协议,这可以显着提高性能。复杂的协议在创建时只能分配一次缓冲区。
[asyncio附带的协议目前都不是从BufferedProtocol
派生的,因此,此用例是需要实现高吞吐量的用户代码-有关详细信息,请参见BPO issue和链接的mailing list post。
[好像没有为
BufferedProtocol
提及TCP,这让我担心我必须应对乱序数据包等。
除非您正在编写自定义的低级异步代码,否则您根本不需要关心BufferedProtocol
。常规的异步TCP代码调用函数,例如open_connection
或open_connection
,这两个句柄都以通常的方式(使用缓冲区,处理错误等)在TCP套接字的顶部提供流抽象。