我正在使用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流碎片,我只收到部分传入消息。我试图缓冲我收到的数据。但是,我无法收到剩余的数据。碎片后接收所有数据的好习惯是什么?
答案 0 :(得分:2)
这是一个关于Twisted的常见问题。 You can find the answer in the Twisted FAQ。查看它推荐的课程,例如Int16StringReceiver
或NetstringReceiver
。或者,对于功能齐全的进程间邮件系统,请查看AMP (the Asynchronous Messaging Protocol),其中还有implementations in other languages。
答案 1 :(得分:1)
您要覆盖的功能是stringReceived
。
使用Int16StringReceiver
时,在收到整个长度前缀字符串后输入stringReceived
,而在接收每个字符串期间可以输入dataReceived
0次或更多次。 / p>
dataReceived
是Int16StringReceiver
在调用stringReceived
之前用于构造完整数据包的调用。它可能必须解析同时收到的多个字符串,或者等待接收完整的字符串。