唐淑華 王遵義
摘 要:在飛速發展的現代社會,及時、有效、準確的信息傳送對各行各業發展尤為重要。B2C模式下的電商企業,客戶滿意度顯著的影響著它的發展,提高客戶的消費體驗十分必要,因此,準確、有效、及時的信息傳送就顯得尤為重要。傳統的基于HTTP協議的單向信息傳送方式已無法滿足人們的需求,社會需要更加高效的方式。而WebSocket協議是一種典型的雙向通信協議,它與HTTP一樣是通過TCP來傳輸數據,與HTTP不同的是,WebSocket協議的客戶端與服務端在一次握手成功后就可以無數次進行數據的發送與接收,極大限度地保證了信息的時效性。
關鍵詞:客戶滿意度 WebSocket協議 數據傳輸 雙向通信
中圖分類號:TP311.5 文獻標識碼:A 文章編號:1672-3791(2018)04(a)-0020-02
電商行業經過多年的發展,如今已進入一個全面發展的階段。網購成為很多人的一個消費習慣,甚至成為一種生活樂趣。但是網購過程中我們也經常遇到一些問題,典型的一個就是缺貨問題。想買的東西斷貨了,什么時候到貨也不確定,也沒有提醒。WebSocket技術能有效解決上述問題。
1 WebSocket協議介紹
WebSocket技術實現了信息的雙向通信,能夠有效應對如今信息傳輸不及時的問題。由于WebSocket技術是一項比較新的技術,它的應用相對較少,相關資料也比較缺乏,美國Danny Coward的《Java WebSocket編程》就比較詳細地介紹了該技術,相關資料還有趙振等主編的《Web異步與實時交互iframe AJAX WebSocket 開發實戰》等。隨著信息技術以及社會去求得發展,相信很快WebSocket技術就會大范圍的應用,在現實社會中發揮更大的作用。
WebSocket協議與Http協議存著差異。基于HTTP協議的Web應用是一種無狀態單向的協議,它是由客戶端主動發起握手請求,建立連接。然而很多情況下服務端才是信息的發布者,這就產生了矛盾,信息更新時間不確定,當出現新的信息,服務器卻不能主動發送,導致了信息的延緩。為解決這類問題,也提出了“輪詢”的方式來獲得最新的信息,但是這樣占用了大量的帶寬,并且每次發送請求都會攜帶大量的協議頭信息,造成資源浪費。ajax輪詢、long poll都不能有效解決該問題。ajax輪詢的原理是讓瀏覽器每隔個幾秒發送一次請求,詢問服務器是否有新信息。long poll原理與ajax輪詢相似,也是采用輪詢的方式,不同的是long poll采取的是阻塞模型,即客戶端發起連接后,如果沒有消息產生,就不返回response給客戶端,直到有消息才返回,返回之后,客戶端再次建立連接。為解決這類問題,很多其他的協議陸續出現,WebSocket協議就是典型的異步全雙工通信機制,它實現了服務端與客戶端的雙向通道[1]。
相較于HTTP協議,WebSocket協議能夠節省很多不必要的流量,減少占用網絡資源,減少信息的延緩同時節約了服務器資源。WebSocket協議僅需一次握手,當連接完成,服務端與客戶端就可以自由發送數據、信息,直至TCP關閉握手。
2 WebSocket事件、方法
WebSocket對象可以觸發4種事件,在建立連接后觸發open事件,客戶端在收到服務端發送的數據時觸發message事件,在通信過程中如發生錯誤是觸發error事件,在連接關閉時觸發close事件[2]。
WebSocket對象有發送數據的send()方法和關閉連接的close()方法。send()方法是在服務端和客戶端建立連接后調用,close()是在數據傳送結束調用。
2.1 WebSocket案例
WebSocket最常見的案例是聊天室系統。客戶端部分,使用Chat.socket.onopen()觸發onopen事件建立連接,用send方法將message對象發送至服務端。程序運行過程中,首先調用Chat.initialize()函數判斷該傳輸協議的類型是https還是http,https協議是由SSL+HTTP協議構建的,相較于http更加安全。接下來還需要判斷所用瀏覽器是否支持WebSocket,最早支持WebSocket協議的瀏覽器應該是chrome,而目前流行的瀏覽器基本能夠支持WebSocket協議,例如:Chrome、Firefox、IE等,該判斷方法是調用Chat.connect(host)。信息的發送以及接收調用了Chat.sendMessage()、Chat.socket.onmessage()方法。最后調用Chat.socket.onclose()方法觸發onclose事件關閉連接。這里并未用到onerror事件,@onerror一般可以用來注解WebSocket端點的方法,使得它能夠處理WebSocket實現處理入站消息時發生的任何的錯誤[2]。前臺要用WebSocket連接到后臺,需要新建一個WebSocket對象,然后就可以和服務器端進行交互,也就是瀏覽器發送消息給服務器端,同時要驗證輸入框的內容是否為空,然后接受服務端發送的消息,把它動態地添加到聊天框中。
服務端部分,首先定義一個WebSocket服務端。value
作為訪問地址。本個例子中:客戶端連接到服務端,Set
2.2 WebSocket協議在電商平臺中的應用
就WebSocket協議的特點,提出以電商平臺為背景,進行信息的主動傳遞。當客戶看中某個商品,商家斷貨了,此時客戶可使用到貨提醒按鈕。同時服務器會將該用戶的操作存入數據庫,當該商品再次上架,庫存大于0,立刻向用戶發送多次的提醒。這里的客戶端可以是網頁也可以是安卓用戶,服務器主動發送提醒的操作就是使用WebSocket協議。實驗過程如圖1所示,實驗結果如圖2所示。可以看出當用戶忘記或者忽略了提醒,服務器可以多次不斷提醒用戶信息,直到商品再次售完或者用戶關閉了此提醒。
使用WebSocket協議的這一設計,一來可以節約帶寬、流量的成本,二來其實時性高于普通的協議,能夠及時有效地提醒客戶,提高客戶滿意度,促進商品的銷售,有利于企業的發展。
雖然部分瀏覽器還不支持此協議,但隨著信息技術的發展,實時技術的需求不斷擴大,WebSocket協議所構建的應用程序必然會不斷完善,風險性不斷減低,WebSocket協議必將成為重要的、普遍的開發協議。
參考文獻
[1] 聶開,張莎莎,王玨輝.WebSocket技術在Web端和服務端之間的應用[J].數字技術與應用,2016(7):77.
[2] (美)Danny Coward,著.Java WebSocket編程[M].劉建,夏先波,譯.北京:清華大學出版社,2015:31-38.
[3] 趙振,王順,于夢竹.Web異步與實時交互iframe AJAX WebSocket 開發實戰[M].北京:人民郵電出版社,2016:72-80.