Python, Daemons and D-Bus

P

PurpleServerMonkey

Seeking feedback from group members on a design I'm looking at using
in a project.

I've created an XML-RPC server and a number of Daemons, the idea is
that the XML-RPC server gets a request from a user interface of some
sort and then sends data to the Daemon processes to do work. Daemons
will also need to feed back task information to the XML-RPC server.

For the communications between the Daemons and XML-RPC server I was
thinking of using D-Bus (The project is for Linux and *BSD) but wanted
to hear what others thought of the idea?

Would you use D-Bus or a more traditional IPC method such as sockets?
Although D-Bus is relatively new it looks interesting, just not sure
it would work well in this kind of project.

Thanks in advance for your thoughts and opinions.
 
S

Sebastian 'lunar' Wiesner

[ PurpleServerMonkey said:
Would you use D-Bus or a more traditional IPC method such as sockets?
Although D-Bus is relatively new it looks interesting, just not sure
it would work well in this kind of project.

DBus is not really intended for private communication between processes of
the same application, but more for intercommunication between different
applications. If the IPC interface of your backend daemons is intended to
be used by other applications, DBus is the right choice, otherwise I would
choose something different.

The reason is, that DBus doesn't know about applications. It exposes all
objects registered on the bus to every DBus client on the system and so
makes you application-private API available to the public (and spams the
bus with lots of generally useless objects ;) ).

In case your IPC interface is application private, a custom IPC protocol
(probably using XML RPC over unix sockets) is better suited.

Moreover you should make your choice dependent on the type of data you
transmit. Both DBus and XML-RPC wrap calls into XML messages, which is
terribly inefficient for large binary data.
 
P

PurpleServerMonkey

[ PurpleServerMonkey said:
Would you use D-Bus or a more traditional IPC method such as sockets?
Although D-Bus is relatively new it looks interesting, just not sure
it would work well in this kind of project.

DBus is not really intended for private communication between processes of
the same application, but more for intercommunication between different
applications.  If the IPC interface of your backend daemons is intended to
be used by other applications, DBus is the right choice, otherwise I would
choose something different.

The reason is, that DBus doesn't know about applications.  It exposes all
objects registered on the bus to every DBus client on the system and so
makes you application-private API available to the public (and spams the
bus with lots of generally useless objects ;) ).

In case your IPC interface is application private, a custom IPC protocol
(probably using XML RPC over unix sockets) is better suited.

Moreover you should make your choice dependent on the type of data you
transmit.  Both DBus and XML-RPC wrap calls into XML messages, which is
terribly inefficient for large binary data.

Thanks Sebastian,

Your comments make a lot of sense. I was thinking of creating a custom
session channel and using that for my purposes but as you mentioned
it's not very secure and I do want to keep the server to daemon
traffic private, the server has an XML-RPC interface with a public
API.

Will definitely look at using a different IPC mechanism for this part
of the project.
 
D

Diez B. Roggisch

PurpleServerMonkey said:
[ PurpleServerMonkey said:
Would you use D-Bus or a more traditional IPC method such as sockets?
Although D-Bus is relatively new it looks interesting, just not sure
it would work well in this kind of project.
DBus is not really intended for private communication between processes of
the same application, but more for intercommunication between different
applications. If the IPC interface of your backend daemons is intended to
be used by other applications, DBus is the right choice, otherwise I would
choose something different.

The reason is, that DBus doesn't know about applications. It exposes all
objects registered on the bus to every DBus client on the system and so
makes you application-private API available to the public (and spams the
bus with lots of generally useless objects ;) ).

In case your IPC interface is application private, a custom IPC protocol
(probably using XML RPC over unix sockets) is better suited.

Moreover you should make your choice dependent on the type of data you
transmit. Both DBus and XML-RPC wrap calls into XML messages, which is
terribly inefficient for large binary data.

Thanks Sebastian,

Your comments make a lot of sense. I was thinking of creating a custom
session channel and using that for my purposes but as you mentioned
it's not very secure and I do want to keep the server to daemon
traffic private, the server has an XML-RPC interface with a public
API.

Will definitely look at using a different IPC mechanism for this part
of the project.

If you can - use Pyro. It is easy, fast and can be made secure using SSL
AFAIK.

Diez
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,982
Messages
2,570,186
Members
46,740
Latest member
JudsonFrie

Latest Threads

Top