[Twisted-Python] Sending a stream via Protocol?

Darren Govoni 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:
> >Hi,
> >  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:
> >
> >self.transport.write(bytes)
> >
> >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
languages,
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 
> >my
> >protocol?
> 
> 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
it more.

> 
> You can read a lot more about these ideas in this series of articles by 
> Itamar Turner-Trauring:
> 
>   http://www.xml.com/pub/au/215

Thanks again.

> 
> Jean-Paul
> 
> _______________________________________________
> Twisted-Python mailing list
> Twisted-Python at twistedmatrix.com
> http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python


-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://twistedmatrix.com/pipermail/twisted-python/attachments/20100206/953a3d01/attachment.htm 


More information about the Twisted-Python mailing list