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