android 通过xmpp即时聊天客户端往服务器发消息,利用XMPP协议推送服务器告警信息到安卓平台及桌面...

XMPP的前身是Jabber,一个开源形式组织产生的网络即时通信协议。

XMPP目前被IETF国际标准组织完成了标准化工作。标准化的核心结果分为两部分;

核心的XML流传输协议

基于XML流传输的即时通讯扩展应用

XMPP的核心XML流传输协议的定义使得XMPP能够在一个比以往网络通信协议更规范的平台上。借助于XML易于解析和阅读的特性,使得XMPP的协议能够非常漂亮。

XMPP的即时通讯扩展应用部分是根据IETF在这之前对即时通讯的一个抽象定义的,与其他业已得到广泛使用的即时通讯协议,诸如AIM,QQ等有功能完整,完善等先进性。

XMPP协议网络架构

XMPP是一个典型的C/S架构,而不是像大多数即时通讯软件一样,使用P2P客户端到客户端的架构,也就是说在大多数情况下,当两个客户端进行通讯时,他们的消息都是通过服务器传递的(也有例外,例如在两个客户端传输文件时).采用这种架构,主要是为了简化客户端,将大多数工作放在服务器端进行,这样,客户端的工作就比较简单,而且,当增加功能时,多数是在服务器端进行.XMPP服务的框架结构如下图所示.XMPP中定义了三个角色,XMPP客户端,XMPP服务器、网关.通信能够在这三者的任意两个之间双向发生.服务器同时承担了客户端信息记录、连接管理和信息的路由功能.网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信)、MSN、ICQ等.基本的网络形式是单客户端通过TCP/IP连接到单服务器,然后在之上传输XML,工作原理是:

(1)节点连接到服务器;

(2)服务器利用本地目录系统中的证书对其认证;

(3)节点指定目标地址,让服务器告知目标状态;

(4)服务器查找、连接并进行相互认证;

(5)节点之间进行交互.

我们为什么要用XMPP协议做告警推送,因为xmpp通知够及时,流量更小。

我们熟知的gtalk 用的也是xmpp协议

我们用python来实现客户端

实现xmpp服务器告警通知,我总结有两种方法:

1.  直接使用免费的xmpp服务器接口,进行推送信息,最出名的就是gtalk了。  我们需要做的只是申请gmail的邮箱,然后在安卓下安装gtalk或者是支持gtalk的apk。然后通过xmpp协议进行推送信息。

我用的是python,后面有介绍他的接口的用法

2.   配置Openfire服务器,openfire是个开源的xmpp服务端。 我们可以自己架设一个im服务器,应该是更稳定,只是维护起来颇为麻烦。如果量大的话,建议用openfire的方法,毕竟你的发送量大的话,gtalk那边肯定有限制的。

0aa551f0f5eaa123b260d0a3fba10cef.png

开始行动~

xmpppy是一个Python的模块,它可以与Jabber.org服务器连接,发送消息。下面是我按照它的项目主页上的一篇基本入门文档做的试验,真是很简单

yum install python

pip install  xmpppy

使用例子

#导入 xmpp 模块

import xmpp

#创建JID,传入的参数就是你申请的jabber标识,这里是一个示例

jid=xmpp.protocol.JID(‘yourname@jabber.org’)

#创建一个客户端

cl=xmpp.Client(jid.getDomain(),debug=[])

#与服务器连接

cl.connect()

#认证,要输入你的密码

cl.auth(jid.getNode(),’yourpassword’)

#发送消息,tojid为一个字符串,是目标jabber名字,text也是一个字符

#串,是你想发送的内容

cl.send(xmpp.protocol.Message(tojid,text))

如果你的 Jabber 客户端是用测试帐号已经打开,你会很快看到收到一条消息。

同时如果将汉字转成utf-8编码,我在 Gush 中的中文测试没有问题。

当然上面只是很简单的功能,但已经可以完成发送信息的功能。真不错。

除了 xmpppy  外还有一个叫 jabber.py 的包,我没有用过,看 xmpppy 介绍是差不多的。不过 xmpppy 的设计与 jabber.py 是不一样的,具体细节有兴趣再看了。

完整测试代码:

import sys,os,xmpp

if len(sys.argv) > 2:

print "Syntax: xsend JID text"

sys.exit(0)

tojid=sys.argv[1]

text=' '.join(sys.argv[2:])

jidparams={}

jidparams['jid']='yourname@gmail.com'

jidparams['password']='yourpassword'

jid = xmpp.protocol.JID(jidparams['jid'])

cl = xmpp.Client(jid.getDomain(),debug=[])

cl.connect(('talk.google.com',5222))

cl.auth(jid.getNode(),jidparams['password'])

cl.send(xmpp.protocol.Message(tojid,text,typ='chat'))

要把发信息的gmail帐号和收信息的gmail帐号加为好友才发的过去哦。

65376fcebf9dba31715eb3e6313f25a8.png

247afae8b0e099a34c6d52d3acfd3609.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值