如何使用 __init__ 函数创建服务器协议 class?

How can I create a server Protocol class with an __init__ function?

我有 Twisted 背景,所以我对 Twisted 实现的协议和工厂有深入的了解。但是,我正在切换到 asyncio,我在理解工厂如何集成到这个特定框架中时遇到了一些麻烦。

official documentation 中,我们有一个服务器 asyncio.Protocol class 定义的示例。它没有用户定义的 __init__ 函数,因此我们可以简单地调用 loop.create_server(EchoServerClientProtocol, addr, port).

如果我们的 Protocol 需要实现一些初始化逻辑会怎样?例如,考虑这个设置最大缓冲区大小的示例:

import asyncio
from collections import deque

class BufferedProtocolExample(asyncio.Protocol):
    def __init__(self, buffsize=None):
        self.queue = deque((), buffsize)

    # ...

在 Twisted 中,您将创建一个 Factory class 来保存所有配置值,然后将其传递给初始化连接的函数。 Asyncio seems to work in the same way,但我找不到任何文档。

可以使用functools.partial,但是处理这种情况的正确方法是什么?

文档has an example where they use a lambda for this, so my guess is that functools.partial is fine. They also state that protocol_factory can be any callable。因此,要拥有类似 Twisted 工厂的东西,您只需要在 class 上实现 __call__,就像您在 Twisted 中实现 buildProtocol 一样。