2013-07-12 65 views
1

我有一個與其他應用程序/服務器交談的Java服務器應用程序。它還必須代表多個用戶與XMPP服務器交談。所以每個用戶使用一個端口不是一種選擇。所以我想到使用BOSH(實際上是BOSH上的一個小黑客,在接收到響應時不ping服務器,但只在XMPP服務器上的閒置時間到達Bosh Connection之前ping)。我還希望將BOSH連接上的「等待」時間設置爲最小值,以便服務器立即返回響應。所有這些都不會阻塞端口太久。如何從服務器端Java應用程序發送XMPP通知?

我在尋找支持BOSH的不同XMPP基於Java的客戶端庫,並且唯一一個我工作的是Tigase JaXMPP庫(經過一些攻擊之後)。但是由於許可模式,我無法在我的項目中使用它。另一種選擇是Smack,但是我意識到他們不支持BOSH,但在官方發佈(它在一個分支上,我認爲它並不真正活躍)。有誰知道這個需求的其他選擇嗎?

當我在閱讀更多內容時,我發現了Strophe.js - 據說它對BOSH有很大的支持 - 但是對於基於Web的應用程序來說,這似乎更多。有誰知道我可以如何從我的java代碼調用Strophe函數,還有無論如何,我可以修改Strophe.js庫以在BOSH連接上設置不同的等待時間,並且在收到響應時不會ping服務器,而只是在不活動時間到期之前?

任何見解或想法表示讚賞。

+0

你是否需要接收這些用戶的消息/節?還是單向的? – MattJ

+0

因此,此服務器應用程序從另一個應用程序接收用戶通知,並且必須處理通知以及在XMPP服務器上登錄/註銷用戶。它不需要爲這個用戶處理任何消息。事實上,我們會阻止這些在XMPP服務器上(在我們的控制下),或者在這臺服務器上忽略它們。希望我回答你的問題。 – user2452768

回答

0

我看到一對夫婦的選項,供您...

第一個選項是爲你的應用作爲server component (XEP-0114)連接到生成的消息。這允許任何進程與其可以傳輸消息的XMPP服務器建立持久連接。一些服務器(Prosody,ejabberd和其他可能的服務器)甚至會允許組件'欺騙'來自任何他們喜歡的JID的消息。

XMPP服務器中的組件支持幾乎是通用的,這非常棒。此外,許多不同語言的庫都支持作爲組件,所以您應該具有很大的靈活性(不幸的是,我不太瞭解Java庫對它們的具體說明)。

第二個選項稍微不太標準化,但取決於您的應用程序,您可能會發現它更容易。一些服務器支持通過XMPP以外的協議向其發送消息。例如,對於Prosody,您可以找到mod_post_msg,對於ejabberd mod_http_message。兩者都允許服務器接受作爲HTTP POST請求提交的消息,這實際上並不簡單,幾乎每種語言都可以在幾行內發出HTTP請求。

這種方法的缺點是它不能在XMPP服務器之間移植,但這是一項非常簡單的任務,並且在您選擇使用的任何服務器中執行操作應該不會很困難。

相關問題