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