[Twisted-Python] Proposed change to buffering

Now that we don't do write-at-once, lists are easier to use. Benefits: Allows protocols with many small writes to not have to do their own buffering (e.g. http, imap4 as currently coded, PB, IRC, telnet, etc. etc.) Problems: Bit more overhead for large writes. There's also a bit of code change in tcp.py for the SSL code. Index: abstract.py =================================================================== --- abstract.py (revision 11908) +++ abstract.py (working copy) @@ -43,7 +43,9 @@ if not reactor: from twisted.internet import reactor self.reactor = reactor - + self._tempDataBuffer = [] # will be added to dataBuffer in doWrite + self._tempDataLen = 0 + def connectionLost(self, reason): """The connection was lost. @@ -81,6 +83,9 @@ there; a result of 0 implies no write was done, and a result of None indicates that a write was done. """ + self.dataBuffer += "".join(self._tempDataBuffer) + self._tempDataBuffer = [] + self._tempDataLen = 0 # Send as much data as you can. if self.offset: l = self.writeSomeData(buffer(self.dataBuffer, self.offset)) @@ -131,15 +136,16 @@ if not self.connected: return if data: - self.dataBuffer = self.dataBuffer + data + self._tempDataBuffer.append(data) + self._tempDataLen += len(data) if self.producer is not None: - if len(self.dataBuffer) > self.bufferSize: + if len(self.dataBuffer) + self._tempDataLen > self.bufferSize: self.producerPaused = 1 self.producer.pauseProducing() self.startWriting() def writeSequence(self, iovec): - self.write("".join(iovec)) + self._tempDataBuffer.extend(iovec) def loseConnection(self): """Close the connection at the next available opportunity.
participants (1)
-
Itamar Shtull-Trauring