2011年(1)
分类: C/C++
2011-03-16 04:37:51
XMPP的全称是Extensible Messaging and Presence Protocol,是一种用于即时消息传递的协议。目前很多即时聊天工具都采用这种协议,包括google的Gtalk/Gmail。XMPP的核心协议有RFC3920 [Extensible Messaging and Presence Protocol(XMPP): Core]和RFC3921 [Extensible Messaging and Presence Protocol (XMPP):Instant Messaging and Presence]. 对于其他一些比较具体的应用,XMPP协议支持对其进行扩展,也就是XMPP Extensions,以xep-###来命名。比如libjingle除了支持即使文本消息的传输,还支持语音的传输,所以libjingle就支持了核心XMPP(RFC390/RFC3921)的协议栈,另外还支持了语音需要扩展协议,这些协议有XEP-0167: Jingle RTP Sessions;XEP-0176: Jingle ICE-UDP Transport Method;XEP-0177: Jingle Raw UDP Transport Method;我想这就是libjingle名称的来源—Library of Jingle Protocol.
Libjingle也是Gmail/Gtalk的底层库,Google公开了libjingle的源代码,赶巧碰上机会看了看libjingle的源代码,个人觉得写得很好,到处充满了巧妙的设计,以及对设计模式的扩展应用。决定研究一下,采纳Chris的建议,用blog记录下来研究的过程。
已经看了一部分Libjingle的源代码,但是还没有涉及到XMPP及其扩展协议的协议栈,所以决定从libjingle使用的各种底层结构开始研究,比如线程管理,消息队列管理,日志管理等。对这些搞的差不多懂了之后,可以按照自己的需要加一些debug code,并使用Gmail/Gtalk帐号登录libjingle的客户端,和别的Gmail/Gtalk账户进行语音聊天,抓取log,对协议栈进行分析。
现在的Gmail可以进行视频通信,暂时还不清楚libjingle是否支持Jingle的视频协议XEP-0180: Jingle Video via RTP。以后的研究过程中再慢慢搞清楚。