2010-09-07 33 views
3

我正在尋找在我的應用程序中使用xmpp包含兩個功能。第一個是幾乎完成的一對一聊天(使用strophe),第二個聊天只是它在facebook上的實時通知。我試圖瞭解xmpp中的pubsub系統,但不覺得它會適合這個特定的問題。如果錯誤請更正,這可能是因爲沒有正確理解概念。 我的要求是這樣的 - 會有預定義的事件,任何用戶可以觸發,當其中一個人在線時,其他在線的人應該收到相同的通知。此外,我還想在發送之前檢查用戶是否喜歡接收通知。我沒有得到的是如果使用pubsub,節點在哪裏以及如何安裝。我可以創建一個其他人都會訂閱的節點嗎?在這種情況下,訂閱者將如何在其上發佈事件而不是節點所有者?使用xmpp的實時通知

我想到的另一種方法是將消息逐個發送給所有用戶的標題類型或附加有效負載,例如<notif/>,用於區分正常消息。這種方法是否適合考慮可擴展性?

回答

0

Pubsub將是一個適合這種情況的解決方案。它可以處理我所能看到的所有需求。如果您希望用戶爲每種消息類型預訂不同的用戶名,則需要爲每個事件類型設置一個節點(或者可以在單個節點上使用篩選器,但我認爲多個節點更容易)。節點所有者可以允許任何人發佈到節點,所以這不是問題。

PEP所提到的,但是如果你想要發佈到不在你的名單的用戶是不是正確的解決方案。

的PubSub也將允許你定義你想要的信息或者根本沒有,如果消息傳輸的簡單動作就足夠翔實的任何內容類型。

+0

確實。 Pubsub非常普遍,即使是遠程描述發佈 - 訂閱場景的任何東西都會將其視爲Pubsub的可能用途。 – Tim 2010-09-21 01:52:29

+0

它完全不是解決方案。我們不在這裏推銷第三方商業服務。 – 2015-07-30 11:34:55

+0

你在咆哮什麼商業服務? Pubsub只是XMPP協議的擴展。我甚至沒有提到任何可用的OSS或商業解決方案。 – Robin 2015-11-12 22:07:52

1

的PubSub會的工作,不過,你描述的感覺更像是MUC(多用戶聊天)。

基本上,它創建了一個聊天室,您的訪問者可以加入(也許不是採用這種空話),然後,嗯,當其中任何SENS消息給聊天室,所有的人都得到它。你當然可以配置你只允許某些用戶發佈的地方。

由於您已經有一個在瀏覽器上運行的客戶端,使用Strophe,它應該相當容易。只要確保這個MUC組件正在您的服務器上運行。

+0

感謝您的回覆。 我也嘗試了MUC與strophe和它的工作很好。但在這種情況下,我想要的是一個通知系統,例如假設有一個問題答案模塊,並且我發佈了一個問題,如果user1回答了這個問題,我就會收到通知。然後,如果用戶B回答,我和用戶A都會收到通知。最重要的是,如果我在網上發佈答案時,我應該看到一個彈出窗口,沒有我點擊任何東西。 如何使用服務器端xmpp lib(例如xmpphp)向所有jid發送標題消息並使用strophe在客戶端處理消息? – naiquevin 2010-09-07 13:14:17

+0

澄清我的上述問題 - 我試着用xmpphp發送消息給一個jid並用strophe客戶端接收它,它工作。我不確定這個方法是否會給任何問題,如果一條消息要發送給很多人。 – naiquevin 2010-09-07 13:23:37

1

你正在嘗試與XMPPHP庫來做,即發送消息,以在需要時多個JID的,就是發佈 - 訂閱或MUC能爲你做。 :d因此,這取決於你需要選擇一個,並繼續與XMPP試驗您的應用程序類型,事情應該讓你繼續明確....

+0

感謝您的回覆..問題是我必須處理不同種類的通知。在某些情況下,pubsub似乎是理想的解決方案,但不適用於所有這些解決方案。這就是爲什麼我想要手動發送通知消息作爲所有人的單一解決方案。 – naiquevin 2010-09-08 06:13:06

+0

這不是我必須說的首選方式,因爲當你的應用程序加載開始增加時,這種方法不會擴展。讓jabber服務器在你的部分做這個廣播的東西,你只需指示jabber服務器什麼/何時/誰通知應該被播出.... – 2010-09-09 00:20:43

1

要回答你關於實時通知第二個問題,你需要的是用PEP而不是pubsub。 2之間的主要區別在於PEP只會發佈給您的名單中的那些人,這是我想要的。此外,我認爲PEP比pubsub或至少jabber.org支持它更廣泛的支持。 PEP唯一的問題是它需要Entity Capability支持。我的博客here。例子在Java中;希望你不會對它不利;-)

+0

感謝您的答覆,將檢查PEP。 根據我的要求,通知需要發佈給任何可能或可能不在我名冊中的人。假設我們考慮這個特定的線程,並且如果abhinav和chuk lee都在我的名單中,但他們並不在彼此的名單中,儘管如此,當李回答時,應該通知abhinav,因爲他之前已經回答了。此外,abhinav和我(問題作者)的文本應該不同。 – naiquevin 2010-09-08 06:23:36

+0

然後我建議你通過使用聊天室作爲pubsub節點來使用MUC方法。但是在的獨立命名空間中攜帶數據。這樣,你的數據就不會出現在聊天室中。正如我所說,我還沒有找到支持pubsub的公共服務器。 – 2010-09-08 08:02:51

+0

你的建議是有效地破解MUC,所以你可以像pubsub一樣使用它。爲什麼打擾,當你只能使用pubsub? – Robin 2015-11-12 22:10:21