XMPP通讯过程-简单实例

版权所有,转载请注明出处:http://guangboo.org/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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值