2013-01-04 37 views

回答

5

這是一個令人驚訝的問題,Vysper經常出現。甚至提出這個問題有幾個原因,我認爲一個特別的原因是HTTP Web服務器實際上以這樣的方式工作,即它創建並向代理a.k.a. web瀏覽器發送內容(HTML,CSS等)。

在基於消息的協議中,如電子郵件和聊天,這有點不同。

電子郵件是由代理人a.k.a.電子郵件客戶端創建和使用的。服務器大多隻作爲Message Brokers(http://en.wikipedia.org/wiki/Message_broker),包括認證,過濾,存儲等方面。他們很少會自己生成自己的電子郵件。通常,一些中央帳戶(例如[email protected][email protected])會創建大部分電子郵件,這意味着實際郵件由電子郵件客戶端生成並由服務器代表客戶端交付。 (此外,電子郵件/ SMTP有客戶直接發送電子郵件到這是一場噩夢通過/垃圾郵件/名義去的接收機電子郵件服務器的特產。)

總的來說,XMPP是這裏沒有什麼區別。 XMPP聊天客戶端連接併發送和接收消息。 XMPP服務器代理消息。因此,爲了回答您的問題,在大多數情況下,已經足夠並建議有一箇中央賬戶與所有其他賬戶進行通信。這是最簡單和最好的解決方案。

但是,XMPP提供的聊天多一點。它擴展了基於表單,發佈/訂閱和管理/命令的類似wizzard的工作流程。

您可以添加自己的擴展,如果你真的需要:

例如,看一下虛擬卡擴展這裏:http://svn.apache.org/viewvc/mina/vysper/trunk/server/core/src/main/java/org/apache/vysper/xmpp/modules/extension/xep0054_vcardtemp/

最重要的,我建議你到子類org.apache。 vysper.xmpp.modules.core.base.handler.DefaultIQHandler這就像通過繼承DefaultServlet實現自己的Servlet一樣。它包含您想要提供的XMPP節的邏輯。

此外,您需要將您的處理程序插入服務器。這是最好的按照VcardTempModule的例子,這

  1. 提供了一個處理程序實例並註冊它做
  2. 初始化持久性(或任何其他後端連接,您可能需要)
  3. 讓您的擴展的命名空間知,並宣佈你的智商在服務發現

如果你需要持久性,看看VcardTempPersistenceManager。

還有什麼要做的是讓你的模塊知道服務器。如果您使用Spring,請在Spring配置中添加一行。如果你使用嵌入式的方法,你需要調用相當於server.addModule(new VcardTempModule());就像在org.apache.vysper.xmpp.server中完成一樣。ServerMain

現在,如果你想發出新的Stanzas(消息),這不是對其他Stanzas通過服務器的反應,你還需要從你自己的Thread創建併發送節。

但是,首選的方法是讓客戶端創建所有消息。