[英]Python - Twisted client - Maximum size of data in dataRecived method
我最近一直在使用和學習扭曲的方法來創建TCP客戶端套接字。
我得到了Protocol
類的dataRecived
方法,將所有數據一起返回。 這意味着所有數據都相互關聯,最后它從服務器返回一個長字節數據。
碼:
from twisted.internet.protocol import Protocol
class ClientProtocol(Protocol):
def connectionMade(self):
self.transport.write(b'a')
def dataReceived(self, data):
print ('data', data)
所以現在我的問題是:
dataRecived
方法是否有數據的最大大小 ? 還是大小不受限制 ?
如果最大,那是什么? 而我該如何覆蓋呢?
注意 :我正在使用Ubuntu 14.04,Python v3.4和Twisted v15.3.0。
根據Twisted文檔 , dataRecived
方法中的data
參數不是無限的 ,它是:
“一串不確定的長度。請記住,您可能需要緩沖一些數據,因為可能會收到部分(或多個)協議消息!”
因此,我們需要手動重寫dataRecived
方法來緩沖數據。 或使用一些從protcol.Protocol定義的繼承類,例如: LineReceiver類或NetstringReceiver類 。
例如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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.