1

在完成使用它的应用程序的过程中,我仍在尝试掌握 Twisted。

我的问题是:

我的应用程序使用 LineReceiver.sendLine 从 Twisted TCP 服务器发送消息。我想知道 sendLine 是否成功。

我收集到我需要以某种方式向 sendLine 添加成功(和错误?)回调,但我不知道该怎么做。

感谢任何指针/示例

4

1 回答 1

3

您需要定义“成功”才能找到答案。

所有立即sendLine(可能)将一些字节添加到发送缓冲区。从某种意义上说,只要它没有引发异常(例如,因为您的行太长或者因为您的行是数字而不是实际行),它就成功了。MemoryErrorTypeError3

不过,这并不是一种非常有用的成功。不幸的是,有用的成功更像是“字节被添加到发送缓冲区,发送缓冲区被刷新到套接字,对等方接收到字节,并且接收应用程序以持久的方式对数据进行操作”。

没有任何东西LineReceiver可以告诉你所有这些事情都发生了。标准解决方案是在您的协议中添加某种确认:当接收应用程序对数据采取行动时,它会发回一些字节,告诉原始发送者消息已被处理。

你不会LineReceiver.sendLine在这里得到太多帮助,因为它真正知道如何做的只是以特定格式发送一些字节。您需要更复杂的协议来处理确认。

幸运的是,Twisted 附带了一些。 twisted.protocols.amp是一个:它提供远程方法调用(完整的响应)作为基本功能。我发现 AMP 适用于广泛的应用程序,因此推荐用于新开发通常是安全的。它在很大程度上取代了旧的twisted.spread(又名“PB”),它还提供远程方法调用和远程对象引用(因此更复杂——根据我的经验,比大多数应用程序需要的更复杂)。还有一些更标准的选项:例如,Twisted Web 包含一个 HTTP 实现(您可能知道,HTTP 擅长请求/响应样式的交互)。

于 2014-01-29T01:30:09.650 回答