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