我目前正在使用 Twisted 开发 Arduino 类型设备的控制系统,并且遇到一些设计问题
目前情况如下:(提前抱歉,可能有点长)
- 为了处理不同类型的设备(每个设备都有不同的固件和通信协议(protocol)),我设计了一个“驱动程序”系统:
- 每个驱动程序由以下部分组成:
- “硬件处理程序类”:Twsited 的 serial 类的包装器,并添加了一些辅助方法
- 自定义串行协议(protocol)
- 每个驱动程序由以下部分组成:
2- 在使用相当特定的协议(protocol)(即入队点、设置温度等)实现 Reprap 3d 打印机(也基于 arduino,也使用串行连接)的驱动程序时),我开始怀疑我是否将处理这些功能的方法(每个功能都有特定的命令)放在正确的位置..
这一切让我想到了我的问题:
我不太确定扭曲协议(protocol)的良好实践,但浏览了其中相当多的文档/代码后,似乎它们往往有相对较少的方法
- 情况总是如此吗?协议(protocol)是否应该仅用于非常低级的功能以及输入/输出格式化和通信?
- 我想要管理的某些设备具有非常明确定义的协议(protocol)(Makerbot 等),我是否应该将通用协议(protocol)规范视为与我正在创建的实际 Twisted 协议(protocol)类不同的东西?
非常欢迎任何建议、提示和指示! 提前致谢。
最佳答案
我会尽力回答一个非常普遍的问题。
1) 构成 Twisted 协议(protocol)的接口(interface)只有 4 个方法: http://twistedmatrix.com/documents/11.0.0/api/twisted.internet.interfaces.IProtocol.html 因此,这将是您的协议(protocol)实现和 Twisted 之间发生所有交互的地方。
2) 除了协议(protocol)实例之外,当然还有生成协议(protocol)实例的工厂(对于每个新连接)。例如,所有连接都可用的内容(例如当前连接的客户端数量等)自然就驻留在此处。
3)当然,构建小型类层次结构可能是有意义的,您可以在其中从协议(protocol)派生,实现所有子协议(protocol)共享的内容,然后仅在派生类中再次实现子协议(protocol)细节。
关于python - 自定义Python Twisted协议(protocol): good practices and complexity?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7134170/