python3的BufferedProtocol是TCP上的抽象吗?还是太底层了,我也必须实现TCP东西?

问题描述 投票:0回答:2

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

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

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

非常感谢!

python-3.x tcp stream python-asyncio
2个回答
0
投票

BufferedProtocol不是基于TCP的协议,它是用于自定义实现asyncio protocolsinterface(基类),尤其是那些试图尽量减少复制数量的协议。 docstring提供了更多详细信息:

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

[asyncio附带的协议目前都不是从BufferedProtocol派生的,因此,此用例是需要实现高吞吐量的用户代码-有关详细信息,请参见BPO issue和链接的mailing list post

[好像没有为BufferedProtocol提及TCP,这让我担心我必须应对乱序数据包等。

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


-1
投票

[我可以确认-BufferedProtocol是TCP的抽象,因此,尽管按照python标准它被认为是低级的,但它不是that低级的。

© www.soinside.com 2019 - 2024. All rights reserved.