[Twisted-Python] Sending a stream via Protocol?
darren at ontrenet.com
Sat Feb 6 12:30:34 EST 2010
On Sat, 2010-02-06 at 17:13 +0000, exarkun at twistedmatrix.com wrote:
> On 04:42 pm, darren at ontrenet.com wrote:
> > I have a simple protocol listening on a port. I send it a text message
> >(a filename)
> >and the protocol tries to stream back the bytes of the file. Mostly,
> >this works
> >but in some cases, the receiving side receives less bytes than is
> >written by:
> >I read the API which says it can receive less than expected bytes or
> >messages. Why?
> That's how TCP works. Bytes you send with one call to write may be
> split into two or more chunks and delivered to the remote dataReceived
> separately, or bytes you send with two or more calls to write may be
> combined into fewer chunks and delivered to the remote dataReceived all
> as one string.
Yes, at the lower OSI layers it does. But in most modern programming
the notion of an I/O stream is built atop it (e.g. sockets will
recombine and order
the packets, but twisted does not?). So naturally, I don't want to
emulate IP in
my Twisted app.
> >So how can I reliably send a sequences of bytes via "dataReceived" in
> If you want "framing" - a byte format built on top of the basic
> functionality provided by TCP, allowing you to differentiate bytes
> belonging to different logical messages from each other - then you
> should take a look at some of the protocols in twisted.protocols.basic
> (NetstringReceiver, Int32StringReceiver, etc) or twisted.protocols.amp
> which expands on this idea to a much greater degree.
Ok, cool. I thought this would be easier in Twisted, but I will research
> You can read a lot more about these ideas in this series of articles by
> Itamar Turner-Trauring:
> Twisted-Python mailing list
> Twisted-Python at twistedmatrix.com
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Twisted-Python