林云開
福建網(wǎng)龍?zhí)煦懣萍加邢薰?,福?福州 350001
一個小型的站點是很難為自己的網(wǎng)站搭建一個IM的服務(wù)環(huán)境,不僅服務(wù)器的開銷巨大,維護的成本也不低。本文將要闡述的就是使用PHP動態(tài)網(wǎng)頁腳本語言中的函數(shù)利用Google Gtalk進行socket通信來實現(xiàn)自己站點的一個Web IM。
Gtalk第一個版本發(fā)布于2005年8月24日,此款通信工具基于xmpp即時通訊協(xié)議。
這里簡單介紹一下4種主流的即時通訊協(xié)議:第一種是即時信息和空間協(xié)議(IMPP);第二種是空間和即時信息協(xié)議(PRIM);第三種是針對即時通訊和空間平衡擴充的進程開始協(xié)議SIP(SIMPLE);第四種是XMPP,全稱是可擴展消息處理現(xiàn)場協(xié)議。XMPP由Jabber軟件基金會開發(fā),是一種基于XML的協(xié)議,它繼承了在XML環(huán)境中的靈活性,前身是Jabber。微軟和IBM的即時通訊軟件是基于SIP(SIMPLE);Google,AOL和Yahoo的產(chǎn)品基于XMPP。Gtalk允許任何第三方在遵循XMPP協(xié)議的前提下都可以隨時與Gtalk實現(xiàn)免費連接。
在此使用的Apache2.2.9和PHP5.2.6進行搭配,操作系統(tǒng)環(huán)境是微軟的Windows7。測試環(huán)境搭建完之后我們就開始此次課題的代碼部分。
本文使用PHP的socket函數(shù)來與Gtalk的服務(wù)器進行通信
stream_socket_client();
stream_socket_enable_crypto();
stream_set_blocking();
在開始編碼之前先解釋一下向另外一個帳號發(fā)送即時消息的流程。首先向服務(wù)器發(fā)送一個開始服務(wù)的請求,服務(wù)器響應(yīng)之后依次starttls(一種通信協(xié)議擴張),之后ssl加密通信,接著發(fā)送用戶驗證信息,服務(wù)器驗證通過之后回復(fù)一個綁定的臨時jid,最后客戶端再將jid連同需要發(fā)送的信息及目標(biāo)用戶名發(fā)送給服務(wù)器,到此本次要實現(xiàn)的通信過程就結(jié)束,發(fā)送”“來結(jié)束此次會話。
編寫一個主函數(shù)connect()來處理整個通信過程,代碼如下:
代碼主要是用來解釋思路及策略,在實際應(yīng)用中需要加入各種驗證及錯誤反饋機制。運行環(huán)境中PHP的SSL擴展需要打開。
除了發(fā)送消息之外我們還可以將更為復(fù)雜的功能集成在我們的站點上,來使用戶的忠誠度更高,這些復(fù)雜的功能它們的內(nèi)在運行過程和上面描述的是一致的。
[1]MichaelJ.Donahoo,KennethL.CalvertTCP/IP Sockets編程[M].北京:清華大學(xué)出版社,2009:59-149.
[2]程偉,孫紅麗.PHP網(wǎng)絡(luò)編程技術(shù)與實踐[M].北京:清華大學(xué)出版社,2008:1-25,293-311.
[3]http://xmpp.org/software/libraries.shtmlxmpp通信協(xié)議地址.