gpt4 book ai didi

python - 我应该如何使用 twisted 组织多连接客户端?

转载 作者:太空宇宙 更新时间:2023-11-04 06:04:36 24 4
gpt4 key购买 nike

我是 twisted 的新手,我不知道应该如何组织我的代码。客户端连接到 TCP(SSL) 控制 channel ,然后将尝试连接到 UDP 上的同一 IP: 端口以获得低延迟数据通道,基于 TCP 提供的加密设置。如果不能,TCP 控制 channel 将用于数据。我想编写一个可重用的客户端,这样人们就可以覆盖具有 dataReceived、controlMessageXReceived、sendControlMessageX、sendDataMessage 等函数的类,无论 UDP channel 是否在使用中,都抽象到我的代码中。

我目前有一个可以理解 TCP 控制 channel 的协议(protocol);出于测试目的,我已经覆盖了那里的 ConnectionMade() 以发送设置消息并确认一切正常(它可以理解服务器,反之亦然)但我不知道如何将其集成到更广泛的上下文中。

(出于好奇,这是 Mumble 的客户端 - 此协议(protocol)规范是 here,我正在尝试将 this 一堆可怕的无法维护(多线程)代码更新为现代)

最佳答案

考虑镜像 Twisted 中已经存在的协议(protocol)/传输分离。

Protocol 对 TCP 一无所知。它只知道如何处理字节流。它是了解 TCP(或 TLS、UNIX 套接字或其他东西)的传输。

Protocol 和它的传输之间有一个明确的接口(interface)(实际上,有两个 - IProtocol 让传输知道它可以对协议(protocol)对象做什么和 ITransport 让协议(protocol)知道它可以对传输对象做什么)。

发明一个对您正在使用的应用程序有意义的界面。例如,ProtocoldataReceived,因为“一些字节到达”是“字节流”发生的事情之一。 Mumble 会发生什么事情?例如,这些内容可能是“连接到服务器的用户”或“消息到达您所在的 channel ”。您的界面可能有针对其中每一个的方法。

现在应用程序开发人员可以通过编写此接口(interface)的实现来实现他们自己的新行为 - 这是明确和完整定义的 - 然后将该实现插入您的库(例如,也许您的库可以提供 connectToMumbleServer(地址,mumbleApplicationObject) API)。

您的库确切地知道它可以对应用程序对象做什么,因为接口(interface)是明确定义的。如果您在相反方向重复此过程,那么应用程序开发人员也会知道他们可以使用您的库对 mumble 服务器执行什么操作(例如“加入 channel ”或“发送音频数据包”)。

可以为应用程序提供一个基类(如Protocol)以进行子类化,但这是一个非常小的便利。如果您最近没有,请打开 twisted/internet/protocols.py 并查看 Protocol 类的实现。那里几乎什么都没有,也没有什么是非常复杂或难以复制的。如果应用程序开发人员必须开始对 object 进行子类化并自己键入所有方法,他们就不会处于劣势。

关于python - 我应该如何使用 twisted 组织多连接客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22841378/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com