dbus-glib: a server with lots of objects
Neal H. Walfield
neal at walfield.org
Mon May 9 01:08:10 PDT 2011
I'll start by asking my question and then providing some background to
Is it possible to listen to all object paths using the dbus-glib
bindings? What is the best way to accomplish this in a program that
already makes extensive use of dbus-glib?
I am implementing a dbus server that exports lots of objects. You can
think of it like the spreadsheet example in the dbus specification or
I am currently using the dbus-glib bindings. I have two reasons.
First, my program already makes extensive use of dbus-glib. Second,
even if I wanted to use the gdbus bindings, I don't think it is
possible, because I need to support a system using glib 2.20.
Although I am able to enumerate all objects apriori, I don't want to
call dbus_g_connection_register_g_object for every object. First,
there are a lot of objects, which I suspect means a fair amount of CPU
overhead. Second, at any given time, most objects do not exist as
gobjects: they exist in a serialized form in a database and are only
instantiated as gobjects on demand. Using
dbus_g_connection_register_g_object, I think I would need to
instantiate all objects (or at least a simple wrapper object per real
object) resulting in a large memory overhead.
Is it possible to accomplish this using the dbus-glib bindings? Do I
need to fallback to the low-level bindings? (Is there an example of
how to properly integrate both bindings in the same program? Or, do
you have any tips?) Should I just pass the object id as a parameter
in the method invocation? In this case, I don't think I can easily
use the normal org.freedesktop.DBus.Properties interface.
More information about the dbus