林云開
福建網龍天銘科技有限公司,福建 福州 350001
一個小型的站點是很難為自己的網站搭建一個IM的服務環境,不僅服務器的開銷巨大,維護的成本也不低。本文將要闡述的就是使用PHP動態網頁腳本語言中的函數利用Google Gtalk進行socket通信來實現自己站點的一個Web IM。
Gtalk第一個版本發布于2005年8月24日,此款通信工具基于xmpp即時通訊協議。
這里簡單介紹一下4種主流的即時通訊協議:第一種是即時信息和空間協議(IMPP);第二種是空間和即時信息協議(PRIM);第三種是針對即時通訊和空間平衡擴充的進程開始協議SIP(SIMPLE);第四種是XMPP,全稱是可擴展消息處理現場協議。XMPP由Jabber軟件基金會開發,是一種基于XML的協議,它繼承了在XML環境中的靈活性,前身是Jabber。微軟和IBM的即時通訊軟件是基于SIP(SIMPLE);Google,AOL和Yahoo的產品基于XMPP。Gtalk允許任何第三方在遵循XMPP協議的前提下都可以隨時與Gtalk實現免費連接。
在此使用的Apache2.2.9和PHP5.2.6進行搭配,操作系統環境是微軟的Windows7。測試環境搭建完之后我們就開始此次課題的代碼部分。
本文使用PHP的socket函數來與Gtalk的服務器進行通信
stream_socket_client();
stream_socket_enable_crypto();
stream_set_blocking();
在開始編碼之前先解釋一下向另外一個帳號發送即時消息的流程。首先向服務器發送一個開始服務的請求,服務器響應之后依次starttls(一種通信協議擴張),之后ssl加密通信,接著發送用戶驗證信息,服務器驗證通過之后回復一個綁定的臨時jid,最后客戶端再將jid連同需要發送的信息及目標用戶名發送給服務器,到此本次要實現的通信過程就結束,發送”“來結束此次會話。
編寫一個主函數connect()來處理整個通信過程,代碼如下:

代碼主要是用來解釋思路及策略,在實際應用中需要加入各種驗證及錯誤反饋機制。運行環境中PHP的SSL擴展需要打開。
除了發送消息之外我們還可以將更為復雜的功能集成在我們的站點上,來使用戶的忠誠度更高,這些復雜的功能它們的內在運行過程和上面描述的是一致的。
[1]MichaelJ.Donahoo,KennethL.CalvertTCP/IP Sockets編程[M].北京:清華大學出版社,2009:59-149.
[2]程偉,孫紅麗.PHP網絡編程技術與實踐[M].北京:清華大學出版社,2008:1-25,293-311.
[3]http://xmpp.org/software/libraries.shtmlxmpp通信協議地址.