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 模組
import
xmpp
#建立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
import
sys,os,xmpp
if
len
(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連線...