2008-08-30 43 views
10

如果我有一個單獨的系統,並具有其自己的用戶和狀態概念,那麼創建到XMPP服務器網絡的橋接最合適的架構是什麼?據我所知,主要有三種方法:橋接到XMPP的最佳體系結構是什麼?

  1. 充當服務器。這會創建一個接觸點,但我擔心它會影響兼容性,並可能會在我的系統中模擬服務器時產生複雜性。

  2. 充當客戶。這似乎意味着我需要在我的系統中爲每個用戶建立一個連接,這只是不能很好地擴展。

  3. 我聽說過XMPP網關協議,但尚不清楚這是否比客戶端解決方案更好。我也不知道這是否標準。

任何建議或權衡,將不勝感激。例如,這些解決方案是否需要在目標XMPP服務器內部運行代碼(不太可能是我可以做的事情)。

回答

4

您聽說過的XMPP網關協議最可能與傳輸有關。傳輸是連接到XMPP服務器和非XMPP服務器的服務器。通過運行交通工具,我可以使用我的Jabber客戶端與使用MSN Messenger的人交談。

對於每個看起來像在線的JID,傳輸通常會連接一次到遠程網絡。也就是說,這是您的選項2的反向。這是因爲傳輸和非XMPP網絡之間沒有特別的關係;交通工具只是一羣普通的客戶。爲此,XMPP客戶端必須先註冊到傳輸設備,爲遠程網絡提供登錄憑據,並允許傳輸設備查看它們的存在。

這個可能擴展性更好的唯一原因是同一個遠程網絡可能有很多傳輸。例如,我的Jabber服務器可以運行一個傳輸到MSN,另一個Jabber服務器可以運行另一個,等等,每個服務器都爲不同的XMPP用戶子集提供連接。雖然這會在Jabber端擴展負載,並且系統上的負載平衡也可能分散負載,但它仍然需要兩個系統之間的許多連接。在你的情況下,因爲(我認爲)事物的非XMPP方面正在合作,所以在非XMPP服務器上放置一個XMPP服務器接口可能是你最好的選擇。該服務器接口最適合管理XMPP JID之間的映射以及該JID將如何顯示在其自己的網絡上,而不是強制XMPP用戶註冊等。

如果你還沒有看到這些,你會發現它們非常有用:

希望有所幫助。

2

我也在類似的系統上工作。

我正在與網關/組件路線。我已經看了幾個選項,並與這一個解決。

網關是基本上具有橋接的Jabber/XMPP與另一網絡的特定目的的成分。在使用XMPP作爲客戶端時,您將不得不構建您認爲理所當然的大部分內容。東西像名冊控制。

有一個組件的實際設計和建築非常少的在線幫助。像上面的答案一樣,我發現xmpp協議/擴展是有幫助的。其中主要有:

通過這些閱讀會告訴你,你將有望能夠處理什麼XEPs。忽略將由您的組件將被處理的服務器處理的內容。

這是一個恥辱,Djabberd有這樣差勁的文檔作爲自己的「一切都是一個模塊」的一聲服務器的後端的可能性可以直接連接到其他網絡系統。我在這方面沒有取得任何進展。其他

0

一種方法是用您的XMPP服務器供應商合作。大多數都有內部API,可以從第三方應用程序注入。例如,Jabber XCP爲此提供了一個非常易於使用的API。

(披露:我對Jabber等公司,該公司背後的Jabber XCP工作)

2

基本上有兩種類型的服務器的服務器(S2S)的連接。第一個要麼稱爲網關,要麼稱爲運輸工具,但它們是一回事。這可能是你正在尋找的那種。我找不到非XMPP方面的具體文檔,但XMPP認爲如何翻譯到舊版服務器的方式是http://xmpp.org/extensions/xep-0100.html。第二種類型在其他任何XEP中都沒有解釋 - 它是常規的XMPP s2s連接。在RFC 3920或RFC 3920bis中查找最新草案更新的「服務器到服務器通信」。

既然你有你的服務器上你自己的用戶和存在,它不是XMPP,這些概念都不會完全映射到XMPP模型。這就是運輸工作的地方。您必須從模型到XMPP模型進行翻譯。雖然這是一些工作,但您確實可以做出所有決定。

這給我們帶來正確的按鍵設計的選擇之一 - 你需要真正決定你要去哪些東西從你的服務映射到XMPP,你是不是有什麼。這些功能和用例描述將推動整體結構。例如,這就像一個交通工具可以與AOL或MSN聊天服務交談嗎?然後,您需要一種方法來映射其等值的名單,狀態,並將會話信息以及本地用戶的登錄名和密碼保存到遠程服務器。這是因爲您的交通工具需要僞裝成這些用戶,並且需要登錄才能使用。

或者,也許你只是通向別人基於XMPP的國際象棋遊戲的橋樑,所以你不需要在遠程服務器上登錄,並且可以採取與電子郵件服務器類似的行爲,並將信息傳回給向前。 (對於正常的s2s連接,唯一可以存儲的會話將是與遠程服務器一起使用的SASL認證,但在用戶級別,s2s僅維護連接,而不是登錄會話。)

其他因素包括可擴展性和模塊化。你注意到了一些可擴展性問題。看看放在多個運輸平衡負載。對於模塊化,請參閱您想要決定如何處理每個數據包或操作的位置。例如,您如何處理和跟蹤訂閱數據?你可以把它放在你的運輸工具上,但是這會使得使用多個運輸工具變得更困難。或者,如果您將此決策更靠近核心服務器,則您可以使用更簡單的傳輸方式,並在需要與XMPP以外的服務通信時使用一些通用代碼。權衡是一個更復雜的核心服務器,具有更大的漏洞潛力。

2

您應該使用哪種體系結構取決於非XMPP系統。

  1. 您是否使用非XMPP系統?如果是,您應該找到一種方法將XMPP-S2S接口添加到該系統,換句話說,使其充當XMPP服務器。美國在線對AIM使用這種方法。不幸的是,他們限制了通往GoogleTalk的門戶。

  2. 您不操作非XMPP系統,但它有一個聯合接口,您可以使用-i。即您的網關可以與另一個系統作爲服務器進行通信,並擁有自己的名稱空間。在這種情況下,您可以構建一個充當聯合服務器的網關。因爲我不知道使用這種方法的網關的任何示例,但是如果要構建公共XMPP到SIP網橋,則可以使用它。

  3. 如果非XMPP系統不給你一個聯邦接口,那麼你沒有別的選擇,只能作爲一羣客戶端。在XMPP世界中,這被稱爲「運輸」。運輸和正常的服務器之間的差別基本上是:

    • 運輸的JID的是從其他系統映射 -
    • (如john.doe \ [email protected]真難看!)
    • 希望使用傳輸的XMPP用戶需要在非XMPP系統上創建帳戶,並將該帳戶的登錄憑據提供給傳輸服務。 XMPP協議甚至有一個協議擴展,允許XMPP用戶在帶內進行傳輸註冊。
相關問題