2011-06-20 34 views
2

我需要一些關於建立基於Django和XMPP的環境的建議。我如何整合Django和XMPP-over-BOSH

我的網站有兩個部分。部分A:用戶在通過Django提供服務的頁面上使用瀏覽器內的XMPP客戶端,如Strophe.JS。

B部分:由不同的用戶組用來與使用站點A部分進行通信的用戶進行通信。此處的用戶還將使用瀏覽器內的XMPP客戶端,如通過Djano服務器的頁面上的Strope.JS。

由於通信發生在瀏覽器中,我不會使用真正的XMPP流,而是通過BOSH使用XMPP。我讀過BOSH上的XMPP是通過HTTP接口傳輸XMPP消息的事實上的方式。

A部分的解決方案很簡單。一個常規的網頁,引入了Strophe.JS庫。對我來說,困難的部分似乎在弄清楚如何處理B部分的用戶。我需要在A部分用戶和B部分用戶之間傳遞XMPP消息。 B部分的用戶需要從Django系統爲A部分的用戶訪問信息。我需要XMPP和Django之間非常好的集成。

有人能告訴我怎麼寫這樣的系統嗎?我會使用什麼工具?我會使用獨立的XMPP服務器並將其集成到Django中嗎?如果是這樣,什麼?當A部分的用戶發起聊天會話時,它將顯示在站點的B部分的用戶上,但是哪個用戶將處理用戶的聊天請求將取決於從Django檢索到的一些信息。

在此先感謝大家。

+1

你可能想看看[Convore背後的技術](http://www.eflorenzano.com/blog/post/technology-behind-convore/)。 –

回答

1

你絕對需要獨立的Jabber/XMPP服務器(例如ejabberd)。我會猜測A部分用戶在聊天室A(MUC)中進行通信,B部分中的相同用戶在聊天室B中進行通信。您需要編寫3個腳本/守護進程(我使用perl和Net :: Jabber (Net :: XMPP無法加入MUC))。他們將是:scripta,scriptb,調解員。

  • 腳本/守護進程A將加入MUC房間A,而調解員是其名單中的一部分。它會收聽所有消息節,但只會對某些消息節點做出反應(例如,帶有「SendToB MSG」身體的消息節)。此消息由已加入聊天室A的用戶發送。然後,應通過scripta將「RelayToB MSG」發送給介體(來自:[email protected],發送至:[email protected])。中介將基於消息節體的「RelayToB」部分將「RelayFromA MSG」發送到MUC B. scriptb將收到「RelayFromA MSG」,並將「MSG」發送到聊天室B.

  • script /守護進程B(相同邏輯),其中[email protected]位於用戶名單中。

  • 調解員不會加入任何聊天室。它的名單中會包含[email protected][email protected]。它只會在聊天室之間轉發消息。

我已經在這裏發佈樣本代碼How to create a jabber/XMPP proxy/logging service?。該代碼將應用scripta/b。代碼很長,並確保您檢查InMessage和InPresence子文件。其他的東西涉及我的需求。

我希望我已經夠清楚了。不要猶豫提出更多問題。

編輯:

  1. 用perl和Net :: Jabber的創建腳本。將登錄到XMPP服務器的用戶將爲[email protected]。每個人都可以發送消息給他。調解員將以格式(來自:user1 MSG)將消息轉發給支持人員。支持人員將通過郵件回覆[email protected](回覆:user1 REPLY)。中介會將REPLY轉發給user1。
  2. 查看mod_shared_roster here http://www.ejabberd.im/shared-roster-all(示例4),這裏是http://www.process-one.net/docs/ejabberd/guide_en.html#htoc61

我認爲2-nd解決方案除了你的頁面中的javascript/strophe代碼之外不需要額外的編碼。

+0

嗨Gjorgji。我找到了一些http://www.speeqe.com/。你怎麼看?該代碼位於https://github.com/thepug/speeqe/wiki。這對你來說看起來像一個有前途的解決方案嗎Speeqe似乎創建了一個多用戶聊天室,但我需要的是像FB,GTalk等的兩人聊天。 –

+0

然後我瘋狂的猜測似乎不正確:)。首先,請您詳細解釋您的網站A部分和B部分的含義。 –

+0

簡單來說:我需要一個實現實時聊天系統。網站上的用戶可以開始聊天,網站後面的支持人員可以幫助用戶。消息傳遞需要基於XMPP。這是否澄清它?網站上的用戶每次只與一個人聊天,但支持人員正在處理多個聊天。 –