利用XMPP協議推送伺服器告警資訊到安卓平台及桌面

2021-09-22 05:17:20 字數 4298 閱讀 1486

jabber

,乙個開源形式組織產生的網路即時通訊協議。

xmpp目前被ietf國際標準組織完成了標準化工作。標準化的核心結果分為兩部分;

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

開始行動~

xmpppy是乙個python的模組,它可以與jabber.org伺服器連線,傳送訊息。下面是我按照它的專案主頁上的一篇基本入門文件做的試驗,真是很簡單

12

yum install python

pip install  xmpppy

使用例子

12

3

4

5

6

7

8

9

10

11

12

13

#匯入 xmpp 模組

importxmpp

#建立jid,傳入的引數就是你申請的jabber標識,這裡是乙個示例

jid=xmpp.protocol.jid(『[email protected]』)

#建立乙個客戶端

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 是不一樣的,具體細節有興趣再看了。

完整測試**:

12

3

4

5

6

7

8

9

10

11

12

13

14

importsys,os,xmpp

iflen(sys.ar**) >2:

print"syntax: xsend jid text"

sys.exit(0)

tojid=sys.ar**[1]

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

jidparams={}

jidparams['jid']='[email protected]'

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 [email protected]

'報警'

要把發資訊的gmail帳號和收資訊的gmail帳號加為好友才發的過去哦。

天氣推送伺服器

1 主要功能 使用者通過天氣推送伺服器暴露出來的介面進行註冊,註冊完畢之後使用者可以新增一些自己的親朋好友的資訊。每天定時爬取全國的天氣,然後推送給使用者的親朋好友。2 伺服器 伺服器使用的是乙個協程版本的web伺服器,支援get和post方法,底層用cgi方法處理帶引數的請求。伺服器對外暴露兩個介...

伺服器訊息推送

客戶端定時向伺服器傳送ajax請求,伺服器接到請求後馬上返回響應資訊並關閉連線 優點 後端程式編寫比較容易 缺點 求中有大半是無用,浪費頻寬和伺服器資源 客戶端向伺服器傳送ajax請求,伺服器接到請求後hold住連線,直到有新訊息才返回響應資訊並關閉連線,客戶端處理完響應資訊後再向伺服器傳送新的請求...

關於伺服器推送

關於伺服器推送 前一階段一直在做伺服器推送的技術調研,公司本來希望能夠使用web server做乙個訊息伺服器,使用http協議實現伺服器到客戶端的實時訊息推送。做了一些技術調研成果暫記如下 1,使用場景 可行開發的客戶端軟體,與伺服器使用http協議互動資訊。使用者開機後,與伺服器建立http連線...