分享

XMPP通讯过程

 Tehero 2014-12-21

版权所有,转载请注明出处:http:///2013/02/25/xmpp-communication-implement-with-xmpppy

上一篇文章《XMPP通讯过程简介》介绍了XMPP协议通讯的大致主要的过程。本文基于该文,并结合实例来直观感受XMPP通讯过程,本文的代码采用python编写,使用了XMPP协议的Python实现xmpp.py(0.5.0rc1)库;尝试连接gtalk服务器,实现基本的通讯过程。

XMPPPY简介

xmpppy库是采用python编写的XMPP协议的实现,它是jabberpy项目的替代方案,后者已停止维护。采用该库并结合python编程语言的特性,可以快速的实现基于XMPP协议的应用,如即时聊天系统。之后在介绍XMPP协议过程中,都将采用该库编写实例,因此这里不做详细介绍,之后会详细的介绍XMPPPY项目,并会对其源码进行分析,以便了解XMPP协议的工作原理或工作方式。

Gtalk简介

Gtalk(Google Talk)是google公司于2005年8月推出的一款IP电话和即时通讯服务,它采用了XMPP协议,并采用XMPP扩展协议Jingle实现VoIP功能。google提供了gtalk客户端应用,但是其服务是面向所有基于XMPP协议的实现,因此我们也可以通过XMPP协议连接gtalk服务。

值得说的是,2005年12月google推出了libjingle库,实现了Jingle协议。该扩展协议可以实现IP电话、视频交流及其他点对点的多媒体服务。

另外,登录gtalk需要使用gmail账户,并且服务器地址是talk.google.com,端口为5223。

代码演示

如下python代码实现简单的XMPP通讯过程:

# -*- codeing:utf-8 -*-
import xmpp

username = 'guangboo49@gmail.com'
password = '***********'
to = 'zhangsan@gmail.com'
msg = 'Hi, Zhang San.'

def main():
    client = xmpp.Client('gmail.com')
    client.connect(server = ('talk.google.com', 5223))
    client.auth(username, password, 'botty')
    client.sendInitPresence()
    message = xmpp.Message(to, msg, typ = 'chat')
    client.send(message)

if __name__=='__main__':
    main()

这段代码的功能:使用本人账户guangboo49@gmail.com连接服务器(talk.google.com, 5223),然后进行验证,在进行初始化出席状态,最后发送一条消息给zhangsan@gmail.com。

其实xmpp.Client('gmail.com')的参数是用来传递xmpp通讯的域,由于我们使用的是gmail账户,都是gmail.com为域的。connect方法的参数其实都使可选的,只是如果connect不传递参数是,系统会根据域gmail.com加上默认的5222端口来连接服务器,显然对于gtalk服务来说是不行的,所有这里传递一个server参数,指定gtalk服务器的地址和端口。另外还有proxy, secure等参数,分别表示代理,和是否使用SSL/TLS建立连接。验证的方法auth的前两个参数较容易理解,第三个参数是资源名称,这里传递的是botty,该参数也是可选的,如果不传递,系统会指定xmpppy为资源名。该方法还有第三个参数sasl,用于指定是否采用sasl方式进行验证。sendInitPresence方法会想服务器发"<presence />"节,用于初始化出席状态,便于通知所有联系人。Message类是XMPP节类型(IQ, Message, Pressence)中的一种,用于发送即时消息,这里的typ参数用于支持消息为两个人的聊天,如果是群聊或组聊的话可以使用groupchat。to表示消息的接收端jid。然后使用send方法将Message的xml串发送到服务器端。这样如果zhangsan@gmail.com也在线的话,将收到“Hi, Zhang San.”的消息。

另外,代码执行结果会输入很多日志信息,因为xmpppy在很多地方还提供了debug参数,默认是要输出很多日志。

本实例非常简短,主要演示使用XMPP进行通讯的过程,当然要实现完整的即时聊天系统还需要很多更加复杂的工作,之后会慢慢涉及。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多