Autoban asyncio 客户端参数

Autoban asyncio client arguments

免责声明:这是我第一次使用 WS 和 MQTT,因此结构可能有误。请指出这一点。

我正在使用 autoban 和 asyncio 通过 websockets 接收消息并将消息发送到 HA (HomeAssistant) 实例。

一旦我的 python 代码收到消息,我想使用 MQTT 将它们转发到 AWS IoT 服务。这种交流需要双向进行。

我把它作为一个脚本来工作,所有的东西都在一个文件中浮动。 我正试图在 class 结构中完成这项工作,这就是我最终工作的完成方式。

为此,我需要我的 WebSocketClientProtocol 能够访问 AWSIoTClient .publish.subscribe。尽管 WebSocketClientProtocol 初始化是通过工厂完成的,但我不确定如何将任何参数传递给它。例如:

if __name__ == "__main__":

    aws_iot_client = AWSIoTClient(...)

    factory = WebSocketServerFactory('ws://localhost:8123/api/websocket')
    factory.protocol = HomeAssistantProtocol

How can I pass aws_iot_client to HomeAssistantProtocol?

我找到了 Autobahn - Twisted 的示例,它使用 self.factory 在 WebSocketClientProtocol subclass 上执行此操作,但这不适用于 asyncio。

我发现在 returns transport, protocol 个实例上调用 run_until_complete,这样我就可以将 AWS 客户端传递给它。

loop = asyncio.get_event_loop()
coro = loop.create_connection(factory, '127.0.0.1', 9000)
transport, protocol = loop.run_until_complete(coro)