自定义Python Twisted协议:最佳实践与复杂性?
我现在正在为Arduino类型的设备开发一个控制系统,使用的是Twisted库,但在设计上遇到了一些问题。
目前的情况是这样的:(提前抱歉,可能有点长)
- 为了处理不同类型的设备(每种设备都有不同的固件和通信协议),我设计了一个“驱动”系统:
- 每个驱动由以下部分组成:
- 一个“硬件处理类”:这是一个对Twisted的serial类的封装,增加了一些辅助方法
- 一个自定义的串行协议
- 每个驱动由以下部分组成:
2- 在为Reprap 3D打印机(同样基于Arduino,也使用串行连接)实现驱动时,由于它们有一些特定的协议(比如enqueue点、设置温度等),我开始怀疑我是否把处理这些功能的方法放在了正确的位置。
这让我产生了一些疑问:
我对Twisted协议的最佳实践不是很确定,但在查看了不少文档和代码后,发现它们通常方法比较少。
- 这总是这样吗?协议是否只应该用于非常底层的功能以及输入/输出格式和通信?
- 我想管理的某些设备有非常明确的协议(比如Makerbot等),我是否应该把通用协议规范视为与我正在创建的实际Twisted协议类不同的东西?
任何建议、提示和指引都非常欢迎!谢谢!
1 个回答
3
我会尽量回答这个比较一般的问题。
1) Twisted协议的接口只有4个方法:http://twistedmatrix.com/documents/11.0.0/api/twisted.internet.interfaces.IProtocol.html。这些方法就是你在实现协议时和Twisted之间进行互动的地方。
2) 除了协议的实例之外,还有一个工厂,它负责生成你的协议实例(每当有新连接时都会生成一个)。比如说,一些应该对所有连接都可用的信息(比如当前连接的客户端数量等)自然就会放在这里。
3) 当然,构建小的类层次结构是有意义的,你可以从Protocol类派生出新的类,先实现一些所有子协议共享的功能,然后再在派生的类中实现子协议的具体内容。