2011-08-20 69 views
2

我目前的Arduino的类型设备控制系统的工作使用扭曲,并有一点设计问题自定义Python Twisted协议:最佳实践和复杂性?

这是怎么回事儿目前:(提前对不起,可能是有点长)

  1. 来处理不同类型的器件(各自具有不同的固件&通信协议)我有一个设计“驱动器”系统:
    • 每个驱动器是由:
      • 一个“硬件汉dler类”:围绕Twsited的串行类的包装与一些添加辅助方法
      • 一个自定义的串行协议

2 - 尽管的RepRap 3D打印机实现驱动程序(也可根据arduino,也使用串行连接)与相当特定的协议(即入队点,设置温度等),我开始怀疑我是否将处理这些功能的方法(每个都有特定的I2C命令)在正确的地方..

这一切都使我对我的问题:

我不太肯定的良好做法尽可能扭曲协议去,而是通过的文件/代码已经看其中不少人似乎倾向于使用相对较少的方法

  • 这种情况总是如此吗?协议只有用于非常低级别的功能和输入/输出格式和通信?
  • 我想要管理的某些设备有非常明确的协议(Makerbot等),我应该考虑一般协议规范是一个不同的事情,然后我创建的实际Twisted协议类?

任何意见,提示和指针都是值得欢迎的! 在此先感谢。

回答

3

我会尽我所能来回答一个很好,相当普遍的问题。

1)组成一个扭曲的协议端口只有4种方法: http://twistedmatrix.com/documents/11.0.0/api/twisted.internet.interfaces.IProtocol.html 因此,这将是您所有的协议实现和扭曲之间的相互作用发生。 2)除了协议实例外,当然还有工厂生成协议实例(对于每个新连接)。例如,所有连接都可以使用的东西(比如当前连接的客户端的数量等等)自然就在那里。

3)当然,建立一个小的类层次结构是有意义的,你可以从协议派生出来,实现所有子协议共享的东西,然后再在派生类中再次实现子协议细节。

+0

感谢您的回应,oberstet,它实际上帮助了很多!因为你提到的链接中的_websocket.WebSocketProtocol_似乎走到了一条类似于我正在采用的路线(大量特定于域的协议,协议层次结构),所以我会看看进入高速公路协议的更多信息。 - 2)仅在我的情况下部分适用:我写的协议是**串行**连接,在扭曲处理方式不同(无工厂等) 扭曲websockets的加分点我将需要取代长歌! 谢谢! –