簡體   English   中英

Python-扭曲的客戶端-dataRecived方法中的最大數據大小

[英]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)

所以現在我的問題是:

  1. dataRecived方法是否有數據的最大大小 還是大小不受限制

  2. 如果最大,那是什么? 而我該如何覆蓋呢?

注意 :我正在使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM