2010-05-25 103 views
4

參照this question,提及XMPP作爲IM互操作性的開放標準。運行定製XMPP服務器應用程序有多容易?

對於我的應用程序來說,如果我使用XMPP進行內部客戶端 - 服務器通信,或者開發自己的內部協議,但在服務器上使用XMPP以允許與其他服務器進行通信,那麼以後將有大的選擇。我的直覺是後者會更容易,也許我高估了採取現有的Jabber服務器或XMPP服務器庫並構建自定義服務器應用程序的工作量?

如果我的客戶端將總是與我的服務器通話,從來沒有直接與其他服務器通信,是否使用XMPP合理或過度使用?

說我想擁有自己的DB用戶,消息,組和自定義數據。實際上涉及到使用XMPP進行設置,以便我可以自由地將數據發送到服務器,並讓我的自定義服務器邏輯處理它?那裏的任何庫允許我運行一個'骨架'XMPP服務器,在那裏我提供了我自己的處理程序,這些處理程序在收到消息時被調用,等等。

我得到了XMPP的總體思路,但是在實際開始的時候我有點失落,甚至在區分是否需要Jabber服務器應用程序或其中一個開源服務器庫周圍。

還有許可問題。我當然不打算開源主代碼庫,如果我要使用GPL XMPP解決方案進行客戶端 - 服務器通信,我的理解是我很難努力不讓自己的代碼與GPL「污染」。

+0

我按照前面建議的方式設置OpenFire來測試XMPP。這很容易。正如我記得你可以設置或從少數支持商店中選擇。我很確定你可以在很多地方連接到服務器。它和許多其他的也是開源的,所以... – kenny 2010-05-29 02:02:10

回答

1

如果你真的想要XMPP,Openfire將是最容易設置的http://www.igniterealtime.org/projects/openfire/之一,如果你使用Java例如,我也會看看BlazeDS。

+0

你可以符合「如果你真的需要XMPP」嗎?如果我的客戶不需要直接與另一臺服務器通話,那麼您是否暗示了使用XMPP而不是我自己的協議是不明智的決定? – 2010-05-25 12:51:44

+0

帶獨立服務器的IMHO XMPP並不完全是我用來在客戶端和服務器之間獲取和發佈數據的東西。我相信定製,調整和保護特定設置,然後來回推送文本信息會更容易。在Java中,我會使用BlazeDS或Atmosphere。如果你用你正在使用的技術來標記你的問題,我肯定有些人可以爲你的案例提供一些常用的設置。 示例:Flex/Flash + Coldfusion或Java + BlazeDS將爲您提供使用AMF協議的機會,二進制,快速,您可以發送對象而不是浪費時間序列化和反序列化它們。 – 2010-05-25 19:21:47

+0

所以你實質上是在推薦一個定製的客戶端 - 服務器通信層,或者爲每個客戶端技術量身定製的層,比如套接字或者遠程對象或者AJAx等等。 – 2010-05-27 00:01:43

2

很容易,如果你是在linux下

sudo apt-get install ejabberd 

,那麼你可以點你的首選IM客戶端爲localhost:5222,你就完成了。 當然,如果你想要一個域名等,需要更多配置/安裝的東西,但我認爲這不是你要求的。

注:還有一個Windows版本ejabberd,http://www.process-one.net/en/ejabberd/downloads

1

你可以寫一個XMPP服務器組件。這將與任何實現XEP 0114的XMPP服務器一起使用。所有主要的XMPP服務器實現都是這樣做的。

如果您有component.localhost.localdomain XMPP服務器組件,並在服務器上運行localhost.localdomain,然後服務器收到發來的任何用戶在任何component.localhost.localdomain消息將立即被傳遞到服務器組件。無論你想要什麼,你都可以使用它(例如處理,存儲在數據庫中等)。回覆會再次通過XMPP服務器發送給原​​始發件人,因此組件不必處理服務器任務。

Ruby庫xmpp4rblather都使得在Ruby中編寫服務器組件非常容易。

與服務器插件相比,XMPP服務器組件的一大優勢在於,它們在服務器代碼中通過標準化接口(如XEP 0114中定義的)進行通信時獨立於服務器代碼。缺點是組件無法訪問服務器內部的數據結構,這可能是也可能不是依賴於應用程序的問題。

但是,如果您從未真正想讓自己的應用程序與其他服務器進行通信,那麼使用XMPP並沒有多大意義。

相關問題