On 05/05/17 12:10, Cory Benfield wrote:

As a second note, you may lock yourself out of HTTP/2. HTTP/2 is not
guaranteed to give you access to a raw transport object (though it

FWIW this kind of thing was, more or less, what I was thinking. It seems unlikely that stealing the TCP connection from Response for a few bytes was wise...

As a third note, your code does not handle the possibility that
original._transport may not implement IPushProducer. While *in

IIUC IResponse.deliverBody *does* guarantee (currently) to provide a transport implementing IPushProducer to the supplied IProtocol, at least as far as the docstring says?

Obviously that doesn't make accessing the private _transport safe - an implementation could wrap the transport to implement the IPushProducer semantics.

practice* it tends to, it needn’t. On top of that, it is not
forbidden for an IPushProducer implementation to call write() even
when paused, and code that wants to be correct in the face of all
situations will need to be able to buffer anyway.

Thanks for confirming this. I suspected as much, but was not certain (I make relatively little use of producer/consumer APIs in my own code).

use case. Right now it’s a bit of an annoyance that t.w._newclient
doesn’t allow the body receiving protocol to exert backpressure on
the data.

How does that square with deliverBody providing an IPushProducer? Is it the case that the transport may just disobey the pauseProducing requests as you've noted above?

_______________________________________________
Twisted-Python mailing list
Twisted-Python@twistedmatrix.com
http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python

Reply via email to