蔡朝鵬
摘 要:WebSocket可實(shí)現(xiàn)服務(wù)器和客戶端的全雙工通訊。為解決WebSocket通信程序編寫的重復(fù)性和不易維護(hù)的問題,基于協(xié)議格式一致性的約定和XML配置文件設(shè)計(jì)了一個(gè)WebSocket客戶端通信框架。該框架使用JavaScript通信類按照XML文件的配置自動(dòng)執(zhí)行通信流程,提升了WebSocket通信程序的可復(fù)用性和可維護(hù)性,提高了開發(fā)效率。
關(guān)鍵詞:WebSocket;JavaScript;XML;HTML5
中圖分類號(hào):TP393 文獻(xiàn)標(biāo)志碼:A 文章編號(hào):2095-2945(2019)20-0020-03
Abstract: WebSocket can realize full-duplex communication between the server and the client. In order to solve the repeatability and difficult maintenance of WebSocket communication program, a WebSocket client communication framework is designed based on the agreement of protocol format consistency and XML configuration file. The framework uses JavaScript communication classes to automatically execute the communication flow according to the configuration of XML files, thus improving the reusability and maintainability of WebSocket communication programs and the development efficiency.
Keywords: WebSocket; JavaScript; XML; HTML5
引言
HTML協(xié)議是一種無狀態(tài)、無連接、單向的應(yīng)用層協(xié)議。單向連接的特點(diǎn)決定了如果服務(wù)器有任何狀態(tài)變化,客戶端都無法獲知。為了讓客戶端正常獲取服務(wù)器的狀態(tài)變化,往往需要客戶端以特定的時(shí)間間隔進(jìn)行Ajax輪詢。這種模式下客戶端會(huì)不斷的向服務(wù)器發(fā)送請(qǐng)求,導(dǎo)致網(wǎng)絡(luò)中出現(xiàn)很多無效數(shù)據(jù)包,浪費(fèi)帶寬資源。
WebSocket是HTML5開始提供的一種在單個(gè)TCP連接上進(jìn)行全雙工通訊的協(xié)議。WebSokcet連接是長(zhǎng)連接,服務(wù)器可以主動(dòng)向客戶端推送消息,客戶端也可以主動(dòng)向服務(wù)器發(fā)送消息。這樣就大大提高了服務(wù)器資源和帶寬的利用效率[1]。
目前一般WebSocket客戶端的使用方式是,用send方法向服務(wù)器發(fā)送數(shù)據(jù),再通過onmessage事件接收并處理服務(wù)器返回的數(shù)據(jù),每條協(xié)議都需要進(jìn)行專門的處理,代碼量大,不易維護(hù),無法復(fù)用,基于此,本文設(shè)計(jì)了一個(gè)可復(fù)用、易維護(hù)的WebSocket客戶端通信框架。
1 框架概述
該通信框架由三部分組成:協(xié)議配置文件格式、通信流程配置文件格式和通信類。程序使用JavaScript語言編寫[2]。
編寫WebSocket客戶端通信程序的流程為:
(1)配置協(xié)議配置文件。
(2)配置通信流程配置文件。
(3)各流程節(jié)點(diǎn)回調(diào)函數(shù)和結(jié)果處理函數(shù)的定義。
(4)通信類對(duì)象初始化。
(5)通信類對(duì)象開始執(zhí)行通信流程。
配置文件用來定義協(xié)議和通信流程,而實(shí)際的通信流程依靠通信類中的函數(shù)來啟動(dòng)執(zhí)行。
本框架需要有一條重要約定,就是所有協(xié)議均遵從同一套結(jié)構(gòu)定義,如均為SCPI協(xié)議。
2 框架流程圖
由此WebSocket框架編寫的程序的運(yùn)行流程圖如圖1。
由圖1可以看出,一旦配置好了協(xié)議和通信流程,則程序會(huì)自動(dòng)運(yùn)行整個(gè)通信流程,直到最后一條協(xié)議。
3 協(xié)議配置文件
可使用XML文件進(jìn)行協(xié)議配置。協(xié)議包括id、類型、內(nèi)容、參數(shù)等元素。配置文件中協(xié)議節(jié)點(diǎn)定義如下:
id:本條協(xié)議的唯一標(biāo)識(shí);
type:表示此協(xié)議為設(shè)置還是讀取類型;
content:此協(xié)議的內(nèi)容;
arg:receive屬性為false時(shí),表示arg為發(fā)送參數(shù),即需要跟content一起發(fā)送給服務(wù)器;receive屬性為true時(shí),表示arg為接收數(shù)據(jù)。type屬性為arg參數(shù)的類型,bytes屬性為arg參數(shù)的字節(jié)數(shù),count屬性為arg參數(shù)的個(gè)數(shù)。
4 通信流程配置文件
通信流程同樣使用XML文件來配置。通信流程節(jié)點(diǎn)需要配置id、協(xié)議id、結(jié)果處理函數(shù)、下一條協(xié)議的信息等。
post_callback="">0