我几乎得到它 - 但我错过了关键点......
我试图弄清楚如何在 Twisted 中构建“分层”协议栈。我可以理解如何附加单个协议并使用 Defers 处理事件,但是如果我想要传统的 OSI 层模型?假设我在 TCP 连接器的底部有一个面向线路的协议,并且我希望将多个面向线路的协议堆叠在顶部,直到我到达应用程序空间。
(想想我想以扭曲的方式实现 TCP/IP 堆栈本身)
OSI 分层模型与 Twisted基本无关(而且,我认为,通常与软件基本无关)。一次查看每一层:
IProtocol
和ITransport
. 传输将字节从传输传递到IProtocol
via dataReceived
,应用程序将字节传递到传输 via ITransport.write()
。(然后,这种关系在电线的另一端反转。)然而,协议内分层更具有临时性。现在通常的习惯用法是简单地将 Protocol 子类化,然后将 from 委托dataReceived
给特定于您的分层习惯用法的新方法,例如lineReceived
,然后将下一层子类化。
如果你真的想要一个使用 Twisted 的 TCP 实现,请看这里。
如果你想看到一个改进 Twisted 内部分层的接口提案,请参阅此处。