hxw

博客园 首页 新随笔 联系 订阅 管理

   最近因为发展需要,要在OA上集成即时通讯工具,本来打算用RTX或MSN的,但是没有相关源码,不好跟具体业务相结合,最后还是放弃了。也想找开源的,但是没找到.NET开发的具有服务端和客户端的,c++和java的倒是有,只可惜自己只对.net比较了解,没办法,只能自己开发了。

   在网上找了很多资料,决定实现一个基于XMPP协议的即使通讯工具,包括服务端和客户端。之所以采用XMPP协议,一是因为XMPP是标准的,二是因为有c#

开发的开源的类库可用。
  XMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。XMPP目前被IETF国际标准组织完成了标准化工作。标准化的核心结果分为两部分;
  核心的XML流传输协议 rfc3920
  基于XML流传输的即时通讯扩展应用 rfc3921
  另外,XMPP Standards Foundation 也定义了许多其他的拓展规范。具体参见XMPP的官方网站:http://xmpp.org/ 这里有所有跟XMPPX相关的RFC

和XMPP拓展协议。上面也列有一些实现了该协议的部分软件,包括服务端和客户端。

  英文不好的人还可以查看

http://wiki.jabbercn.org/index.php/首页 这是xmpp的中文网站,翻译了主要的xmpp协议。

  目前.net平台上的xmpp开发库主要有:agsxmpp sdk IP*Works Internet Toolkit  jabber-net 等。
  建议使用agsxmpp 来开发。

  xmpp是基于xml来传输数据的。一般采用c/s 模式。客户端通过TCP连接客户端,而且是一直保持连接。目前也有HTTP的实现。

客户端和服务端通过xml流来交换信息。

下面是一段登录所传输的信息:(这是Spark的登录过程)

 C 代表客户端 S 代表服务端

 C:<stream:stream to="1" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0">

 S:<stream:stream from='hp520' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='a7747277-ad62-4813-b739-63504d6e1246' version='1.0' xml:lang='zh-cn'>

 S:<stream:features xmlns="http://etherx.jabber.org/streams"><starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls" /><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>PLAIN</mechanism><mechanism>DIGEST-MD5</mechanism></mechanisms><compression xmlns="http://jabber.org/features/compress"><method>zlib</method></compression><auth xmlns="http://jabber.org/features/iq-auth" /><register xmlns="http://jabber.org/features/iq-register" /></stream:features>

C:<starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"/>

S:<proceed xmlns="urn:ietf:params:xml:ns:xmpp-tls" />

C:<stream:stream to="hp520" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0">

S:<stream:stream from='hp520' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='a7747277-ad62-4813-b739-63504d6e1246' version='1.0' xml:lang='zh-cn'>
<stream:features xmlns="http://etherx.jabber.org/streams"><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>PLAIN</mechanism><mechanism>DIGEST-MD5</mechanism></mechanisms><compression xmlns="http://jabber.org/features/compress"><method>zlib</method></compression><auth xmlns="http://jabber.org/features/iq-auth" /><register xmlns="http://jabber.org/features/iq-register" /></stream:features>

C:<auth mechanism="PLAIN" xmlns="urn:ietf:params:xml:ns:xmpp-sasl">AGh4dwAx</auth>

S:<success xmlns="urn:ietf:params:xml:ns:xmpp-sasl" />

C:<stream:stream to="hp520" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0">

S:<stream:stream from='hp520' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='a7747277-ad62-4813-b739-63504d6e1246' version='1.0' xml:lang='zh-cn'>
<stream:features xmlns="http://etherx.jabber.org/streams"><compression xmlns="http://jabber.org/features/compress"><method>zlib</method></compression><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind" /><session xmlns="urn:ietf:params:xml:ns:xmpp-session" /></stream:features>

C:<iq id="O193v-0" type="set"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><resource>spark</resource></bind></iq>

S:<iq xmlns="jabber:client" id="O193v-0" type="result"><bind xmlns="urn:ietf:params:xml:ns:xmpp-bind"><resource>spark</resource><jid>hxw@hp520/spark</jid></bind></iq>

C:<iq id="O193v-1" type="set"><session xmlns="urn:ietf:params:xml:ns:xmpp-session"/></iq>

S:<iq xmlns="jabber:client" id="O193v-1" type="result"><session xmlns="urn:ietf:params:xml:ns:xmpp-session" /></iq>

posted on 2009-01-05 01:01  redfox105  阅读(9021)  评论(9编辑  收藏  举报