Twisted Documentationによると、メソッドのdataパラメーターは無制限ではなく、次のとおりです。dataRecived
" 不確定な長さの文字列。一部の (または複数の) プロトコル メッセージが受信される可能性があるため、おそらくデータをバッファリングする必要があることに注意してください! " .
dataRecivedそのため、データをバッファリングするためにメソッドを手動でオーバーライドする必要があります。または、この問題のLineReceiver クラスまたはNetstringReceiver クラスのような protcol.Protocol から定義された継承クラスを使用します。
たとえば、クラスdataReceivedのソースは次のLineRecevierとおりです。
def dataReceived(self, data):
"""Protocol.dataReceived.
Translates bytes into lines, and calls lineReceived (or
rawDataReceived, depending on mode.)
"""
self.__buffer = self.__buffer+data
while self.line_mode and not self.paused:
try:
line, self.__buffer = self.__buffer.split(self.delimiter, 1)
except ValueError:
if len(self.__buffer) > self.MAX_LENGTH:
line, self.__buffer = self.__buffer, ''
return self.lineLengthExceeded(line)
break
else:
linelength = len(line)
if linelength > self.MAX_LENGTH:
exceeded = line + self.__buffer
self.__buffer = ''
return self.lineLengthExceeded(exceeded)
why = self.lineReceived(line)
if why or self.transport and self.transport.disconnecting:
return why
else:
if not self.paused:
data=self.__buffer
self.__buffer=''
if data:
return self.rawDataReceived(data)