在完成使用它的应用程序中时,我仍在努力掌握Twisted。
我的问题是:
我的应用程序使用LineReceiver.sendLine从Twisted TCP服务器发送消息。 我想知道sendLine是否成功。
我认为我需要以某种方式为sendLine添加成功(和错误?)回调,但我不知道如何做到这一点。
感谢任何指针/示例
答案 0 :(得分:3)
您需要定义“成功”才能得出答案。
所有sendLine
立即执行 (可能)将一些字节添加到发送缓冲区。在某种意义上,只要它不引发异常(例如,MemoryError
因为你的行太长或TypeError
,因为你的行是数字3
而不是实际行它成功了。
LineReceiver
中的任何内容都无法告诉您所有这些事情都已发生。标准解决方案是在协议中添加某种确认:当接收应用程序对数据执行操作时,它会发回一些字节,告诉原始发件人消息已被处理。
你不会让LineReceiver.sendLine
在这里给你太多帮助,因为它真正知道怎么做就是以特定格式发送一些字节。您需要一个更复杂的协议来处理确认。
幸运的是,Twisted附带了一些。 twisted.protocols.amp
是一个:它提供远程方法调用(完成响应)作为基本功能。我发现AMP适用于广泛的应用,因此建议进行新的开发通常是安全的。它在很大程度上取代了旧的twisted.spread
(又名“PB”),它同时提供远程方法调用和远程对象引用(因此更复杂 - 根据我的经验,比大多数应用程序需要的更复杂)。还有一些选项更加标准化:例如,Twisted Web包含HTTP实现(HTTP,正如您所知,擅长请求/响应样式交互)。