2013-04-21 57 views
0

我正在编写一个程序,该程序在单个文档上工作。如果你想打开多个文件,你只需要打开一个文件的进程(是的,在这种情况下进程隔离是很重要的)。我们将这些过程称为服务器。提供DBus对象的多个进程

每个服务器将提供一个代表文档的对象,我希望客户端应用程序能够发现这些对象。理想情况下,客户端界面将无法确定文档是否属于不同的流程。

我的模糊解决方案是让所有进程共享一个众所周知的连接名称(org.example.MyApplication),并为其中的对象提供PID以避免重复(/ org/example/MyApplication /)。 但是,进程不能共享相同的众所周知的连接名称,所以这不起作用。

我想我可以让客户端应用程序来监视新的连接,并扫描它们以查看预期的对象路径是否存在,但这似乎是一个坏主意。

任何想法,我可以做到这一点?

回答

0

KDE使用的一种方法是使用后缀为PID的知名名称,如org.kde.StatusNotifierItem-2055-1。客户可以拨打org.freedesktop.DBus.ListNames并过滤列表。

还是第一台服务器可以抓住众所周知的名称和后续各个则调用它来注册自己的单据,客户可发现:

src name = :0.42 
src path = /org/example/MyApplication/2 

dest name = org.example.MyApplication 
dest path = /org/example/MyApplication/Documents 
dest method = Publish(:0.42, /org/example/MyApplication/Documents/2)