如何使用__init__函数创建服务器Protocol类?

blz*_*blz 4 python python-asyncio

我来自Twisted背景,因此我对Twisted实施的协议和工厂有了深刻的理解.但是,我正在切换到asyncio,我在理解工厂如何集成到这个特定框架时遇到了一些麻烦.

官方文档中,我们有一个服务器asyncio.Protocol类定义的示例.它没有用户定义的__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)

    # ...
Run Code Online (Sandbox Code Playgroud)

在Twisted中,您将创建一个Factory类来保存所有配置值,然后将其传递给初始化连接的函数.Asyncio 似乎以相同的方式工作,但我找不到任何文档.

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

Phi*_*lip 5

文档有一个例子,他们使用lambda,所以我的猜测是functools.partial很好.他们还指出,protocol_factory可以是任意调用.因此,对于像Twisted的Factorys这样的东西,你只需要__call__在类中实现你buildProtocol在Twisted中实现的方式.