Twisted dataReceived中的碎片数据

时间:2012-08-06 22:25:08

标签: python protocols twisted

我正在使用protocol.Protocol从服务器接收数据。如下

from twisted.internet.protocol import Protocol, Factory

class MyProtocol(Protocol):
    def dataReceived(self, data):
        print data

class MyFactory(Factory):
    def startedConnecting(self, connector):
        print 'Started to connect.'

    def buildProtocol(self, addr):
        print 'Connected.'
        return MyProtocol()

当我收到大量数据时,由于TCP流碎片,我只收到部分传入消息。我试图缓冲我收到的数据。但是,我无法收到剩余的数据。碎片后接收所有数据的好习惯是什么?

2 个答案:

答案 0 :(得分:2)

这是一个关于Twisted的常见问题。 You can find the answer in the Twisted FAQ。查看它推荐的课程,例如Int16StringReceiverNetstringReceiver。或者,对于功能齐全的进程间邮件系统,请查看AMP (the Asynchronous Messaging Protocol),其中还有implementations in other languages

答案 1 :(得分:1)

您要覆盖的功能是stringReceived

使用Int16StringReceiver时,在收到整个长度前缀字符串后输入stringReceived,而在接收每个字符串期间可以输入dataReceived 0次或更多次。 / p>

dataReceivedInt16StringReceiver在调用stringReceived之前用于构造完整数据包的调用。它可能必须解析同时收到的多个字符串,或者等待接收完整的字符串。