|
最近在移動(dòng)端開(kāi)發(fā)中遇到推送消息、即時(shí)通信的需求,以前沒(méi)有注意過(guò)這方面的知識(shí),特別花費(fèi)一段時(shí)間搗鼓了一下,初步實(shí)現(xiàn)了c#訪問(wèn)openfire服務(wù)器,實(shí)現(xiàn)即時(shí)通信。特此記錄一下,方便與我一般的初涉者參考。
首先,即時(shí)通信服務(wù)分為服務(wù)端與客戶端兩塊。 一、服務(wù)端 服務(wù)端使用openfire直接進(jìn)行搭建,基本上是一步步向下操作即可。 我使用的是exe版本的安裝程序,首先正常安裝,然后啟動(dòng)服務(wù)器端,進(jìn)入其web的管理臺(tái),進(jìn)行一些初始化的設(shè)置。中間主要需要設(shè)置數(shù)據(jù)庫(kù)訪問(wèn),注意官方自帶的JDBC類型并不完整,比如我使用的是oracle,則需要自己下載相應(yīng)數(shù)據(jù)庫(kù)版本的JDBC,將包放到openfire安裝目錄下的lib文件夾中。 測(cè)試:服務(wù)端設(shè)置成功以后,可以安裝直接的Spark客戶端進(jìn)行測(cè)試(常規(guī)的即時(shí)通信工具)。 openfire和Spark下載地址:http://www./downloads/index.jsp
二、客戶端 因?yàn)閛penfire是JAVA項(xiàng)目,我們這些C#選手想要使用須通過(guò)agsXMPP進(jìn)行訪問(wèn)。 在使用agsXMPP訪問(wèn)openfire服務(wù)器時(shí)需要注意以下問(wèn)題。
1. 認(rèn)證協(xié)議問(wèn)題 agsXMPP 在認(rèn)證的時(shí)候,默認(rèn)使用 DIGEST-MD5 ,但是在 openfire 下無(wú)法認(rèn)證通過(guò),改成 PLAIN 即可,也就是在 miniclient 的 frmMain.cs 的 XmppCon_OnSaslStart 方法中,將如下兩行的注釋去掉: args.Auto = false; args.Mechanism = agsXMPP.protocol.sasl.Mechanism.GetMechanismName(agsXMPP.protocol.sasl.MechanismType.PLAIN); 2. Iq 節(jié) Openfire 不支持 Iq 節(jié)帶 to 的屬性,所以在 agsXMPP 中發(fā)送 Iq 節(jié)的時(shí)候先 RemoveAttribute("to") 一下就行了,具體的就是找到 agsXMPP 源代碼目錄下的 sasl/saslHandler.cs 文件中,所有調(diào)用 SendIq 方法的前面,都加入如下語(yǔ)句: bIq.RemoveAttribute("to"); |
|
|