2013-04-21 64 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)