Hello, I am writing an application, which architecture is (I hope my beautiful drawing is not messed up):
+-------------+ +------------+ +-----------+ | Core Server |---| Web Server |---| Web client| +-------------+ +------------+ +-----------+ That is, I have a core server (itself interacting with a database, but I think this is not important). I have a second piece of software, which is both a client regarding the core server, and a web server. At last, the web client is the web browser of your choice. The web server is a Django application, which means that (as far as I know) I cannot (easily) make it use asynchronous calls. At last, for the communication between the core server and the web server (which is, from this point of vue, a client), I was looking for something that let me use remote objects as if they were local. That is when I discovered Twisted. Twisted seems to be the kind of tool I want to use because it seems to be powerful, can use SSL, authentication, transmits exceptions, is meant to be used with Trial (I want to write tests), etc. The problem is that one of the strength of Twisted is its ability to deal with asynchronous tasks, which I am not interested in. Using blockingCallFromThread() [1], I managed to make a small package which looks (from my Twisted-ignorant point of vue) promising for my application, where the server is simply defined by (in a Twisted .tac file): # Server() is the object to be exported to the client application = server.get_application(Server(), "tcp:8800:interface=localhost") And the client can perform something like: remote = client.RemoteObject("localhost", 8800) # display() is a method executed on the server remote.display("Hello, world!") remote.disconnect() But then I noticed that I might have problem to test it using Trial (because an deadlock happens when blockingCallFromThread() and the reactor are waiting for each other in the same thread). I also had a look at inlineCallbacks [2], but although code looks synchronous inside the decorated function, the function itself still returns a deferred. I noticed quite a few other minor things. And I started to realize that Twisted is not meant to be used that way (and I read a bunch of threads of the Twisted mailing list with subjects containing "synchronous", including this long one [3]). My question is: What is your reaction? a) "Nice hack! Go on!" b) "Go on if you like, but you won't be able to use advanced Trial stuff (like timeouts), let alone Trial." c) "Go on if you wish, but you are missing the beauty of Twisted." d) "Stop it now. You have clearly misunderstood Twisted. You are wasting your time and ours." e) Any other... Do you think Twisted is the right tool for my use case, or am I doing an ugly hack to do what I want, which means I should rather use another tool? Sorry for the length of this post, and thanks in advance for your help. Louis [1] http://twistedmatrix.com/documents/current/api/twisted.internet.threads.html#blockingCallFromThread [2] http://twistedmatrix.com/documents/current/api/twisted.internet.defer.html#inlineCallbacks [3] http://twistedmatrix.com/pipermail/twisted-python/2005-October/thread.html#11831 _______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python