2

我正在使用 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 流分片,我只接收到部分传入的消息。我正在尝试缓冲收到的数据。但是,我无法接收剩余的数据。分片后接收所有数据的好习惯是什么?

4

2 回答 2

2

这是关于 Twisted 的常见问题。 您可以在 Twisted FAQ 中找到答案。查看它推荐的类,例如Int16StringReceiverNetstringReceiver。或者,对于功能齐全的进程间消息传递系统,请查看AMP(异步消息传递协议),它也有其他语言的实现

于 2012-08-07T03:26:44.127 回答
1

您要覆盖的功能是stringReceived.

使用时Int16StringReceiverstringReceived在接收到整个长度前缀字符串后输入,而dataReceived在接收每个字符串期间可以输入零次或多次。

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

于 2012-12-26T18:31:13.853 回答