扭曲的tcp协议数据丢失问题

时间:2011-08-30 02:10:54

标签: python tcp twisted

我用twisted.internet模块编写了一个基于tcp的服务器。这是一个高并发环境。

我通常通过protocol.Protocol实例发送数据,我遇到了问题。 某些tcp连接可能因超时而关闭,似乎我无法收到任何通知,因此我在封闭连接中写入的数据可能会丢失。

数据丢失问题可能是由其他方式引起的。

有没有什么好方法可以控制它? (socket.send可能返回一个状态,transport.write似乎没有返回)

1 个答案:

答案 0 :(得分:4)

此问题并非特定于Twisted。如果您想知道收到数据,您的协议必须确认收到了数据。

来自send()的结果告诉您数据是由对等方授权收到的;它只是说它被内核排队等待传输。从您的应用程序的角度来看,数据是由Twisted,C运行时,内核,中间下游交换机,还是对等内核或其他任何内容排队都无关紧要。也许它被发送了,也许它不是。换句话说,transport.write()负责send()没有的额外缓冲,保证它总是缓冲所有字节,而send()只缓冲一些。

如果您关心网络对等方是否看过您的数据,您绝对需要有应用程序级确认消息。