博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用XMPP协议推送服务器告警信息到安卓平台及桌面
阅读量:7071 次
发布时间:2019-06-28

本文共 2442 字,大约阅读时间需要 8 分钟。

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那边肯定有限制的。

204421183.png


开始行动~

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


1
2
yum install python
pip install  xmpppy

使用例子


1
2
3
4
5
6
7
8
9
10
11
12
13
#导入 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 是不一样的,具体细节有兴趣再看了。


完整测试代码:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
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'
))


执行  python xsend.py  '报警'


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


003850507.jpg

003850403.jpg


 本文转自 rfyiamcool 51CTO博客,原文链接:http://blog.51cto.com/rfyiamcool/1203949,如需转载请自行联系原作者

你可能感兴趣的文章
Google发布App Engine第二代运行时,提供Python 3.7和PHP 7.2支持
查看>>
安全狗:云时代的服务器安全守护者
查看>>
从初创型到独角兽企业,监控架构演进的那些事儿
查看>>
BAT集体升级云事业部,这背后都藏着哪些“小心思”?
查看>>
Oracle 裁员史:技术人死于重组,卒于云计算
查看>>
GNU parallel 笔记
查看>>
性能之巅:Linux网络性能分析工具
查看>>
InfoQ就Spring Boot 2.0 GA版发布采访了项目牵头人Phil Webb
查看>>
Oracle回应用户锁定,自治数据库是更好选择
查看>>
微软在C# 8中引入预览版可空引用类型
查看>>
度量和提高代码质量
查看>>
批量创建用户及密码
查看>>
redis cluster (1) 原理与基本操作
查看>>
数据库的三大范式以及五大约束
查看>>
Nginx学习笔记(二)——搭建Web服务器
查看>>
BGP之间建立邻居
查看>>
python作业
查看>>
DNS配置,主从,子域,转发
查看>>
Python之collection系列
查看>>
接口实现单例模式
查看>>