[Twisted-Python] Help using XmlStreamFactory & XmlStream : XPathQuery error?

Jean-Paul Calderone exarkun at divmod.com
Wed Feb 20 08:35:54 MST 2008


On Wed, 20 Feb 2008 16:19:52 +0100, Gabriel Rossetti <mailing_lists at evotex.ch> wrote:
> [snip]
>And if I'm not mistaking, 
>if I have multiple connections, then the events get mixed up (from my own 
>tests anyways), the processing is not atomic. If I have let's say that I 
>have :
>
>client1 : <test><header  id="1"/>
>client2 : <test><header  id="2"/><feed name="myName">toto</feed></test>
>client2 : <feed name="myName2">lala</feed></test>

I think the 3rd line should be client1?

>
>my stanzas will get processed in that order, thus I can't even recreate the 
>message (without a complicated state machine of some kind).
>
>I'm kind of mixed up, because when using a thread based network framework, 
>one tcp connection = one thread, thus the protocol execution is atomic, but 
>this doesn't seam to be the case with Twisted (event based), is this correct 
>or have I missed something again?

If you send all events to a single function with no indication of where they
came from, then you will certainly have difficulty figuring out what's going
on.  So, don't do that. ;)

One solution is to have a difference instance for each connection and to use
a bound method as the event handler.  This gives you an obvious per-instance
place to keep state and such - on the instance.  There are other solutions,
of course, like passing in some extra object to the event handler so you can
differentiate between clients.

If you use instances and bound methods, then client1's stanzas will be sent
to the instance you created to handle client1 and client2's stanzas will be
sent to the instance you created to handle client2.  This way, it should be
trivial to keep track of what's going on.

Jean-Paul




More information about the Twisted-Python mailing list