Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python twisted中的协议分层_Python_Protocols_Twisted - Fatal编程技术网

Python twisted中的协议分层

Python twisted中的协议分层,python,protocols,twisted,Python,Protocols,Twisted,我几乎明白了--但我遗漏了关键点 我试图弄清楚人们如何在Twisted中构建“分层”协议栈。我可以理解一个人是如何附加一个协议并延迟处理事件的,但是如果我想使用传统的OSI层模型?假设我在TCP连接器的底部有一个面向行的协议,并且我希望在到达应用程序空间之前在顶部堆叠多个面向行的协议 (想想我想在twisted中实现TCP/IP堆栈本身)OSI分层模型与twisted基本无关(而且,我认为,通常与软件无关)。一次查看每一层: 物理:显然,Twisted不是以太网电缆或物理交换机,所以它不能这样做

我几乎明白了--但我遗漏了关键点

我试图弄清楚人们如何在Twisted中构建“分层”协议栈。我可以理解一个人是如何附加一个协议并延迟处理事件的,但是如果我想使用传统的OSI层模型?假设我在TCP连接器的底部有一个面向行的协议,并且我希望在到达应用程序空间之前在顶部堆叠多个面向行的协议

(想想我想在twisted中实现TCP/IP堆栈本身)

OSI分层模型与twisted基本无关(而且,我认为,通常与软件无关)。一次查看每一层:

  • 物理:显然,Twisted不是以太网电缆或物理交换机,所以它不能这样做
  • 数据链路:为了让Twisted在网络接口上运行,您的操作系统需要连接到物理网络。数据链路协议通常需要在硬实时设备中实现,通常在硬件中实现,因此Twisted不适合这样做
  • 网络:这一层,如果它不同于“传输”层,那么它是像BGP和路由器之类的东西,与您的应用程序不同
  • 传输:在这一层,我们有两个接口,和。传输通过
    dataReceived
    将字节从传输传送到
    IProtocol
    ,应用程序通过
    ITransport.write()
    将字节传送到传输。(然后在导线的另一端反转此关系。)
  • 会话:(这是传输的一部分)
  • 演示:这就像CSS样式表之类的东西
  • 应用:显然Twisted不做这部分,你自己做
  • 然而,在协议分层中,有点特别。现在常用的习惯用法是简单地将Protocol子类化,然后从
    dataReceived
    委托给一个新方法,该方法特定于您的分层习惯用法,例如
    lineReceived
    ,然后让下一层的子类

    如果您确实想要使用Twisted的TCP实现

    如果你想看到一个接口的提案,它将改进Twisted本身的分层。OSI分层模型主要与Twisted无关(而且,我认为,通常与软件无关)。一次查看每一层:

  • 物理:显然,Twisted不是以太网电缆或物理交换机,所以它不能这样做
  • 数据链路:为了让Twisted在网络接口上运行,您的操作系统需要连接到物理网络。数据链路协议通常需要在硬实时设备中实现,通常在硬件中实现,因此Twisted不适合这样做
  • 网络:这一层,如果它不同于“传输”层,那么它是像BGP和路由器之类的东西,与您的应用程序不同
  • 传输:在这一层,我们有两个接口,和。传输通过
    dataReceived
    将字节从传输传送到
    IProtocol
    ,应用程序通过
    ITransport.write()
    将字节传送到传输。(然后在导线的另一端反转此关系。)
  • 会话:(这是传输的一部分)
  • 演示:这就像CSS样式表之类的东西
  • 应用:显然Twisted不做这部分,你自己做
  • 然而,在协议分层中,有点特别。现在常用的习惯用法是简单地将Protocol子类化,然后从
    dataReceived
    委托给一个新方法,该方法特定于您的分层习惯用法,例如
    lineReceived
    ,然后让下一层的子类

    如果您确实想要使用Twisted的TCP实现


    如果您想看到一个接口提案,它将改进Twisted本身的分层功能。

    我认为正式的、有文档记录的、广泛使用的协议和传输接口最好用“即席”来描述,不管您多么喜欢它。:)
    dataReceived
    → <代码>stringReceived或
    dataReceived
    lineReceived
    是特别的。好的,更新了答案来描述协议/传输分层的非特别接口。我不认为正式的、有文档记录的、广泛使用的协议和传输接口最好描述为“特别的”,不管你有多喜欢它。:)
    dataReceived
    → <代码>stringReceived或
    dataReceived
    lineReceived
    是特殊的。好的,更新了答案,以描述协议/传输分层的非特殊接口。