三、 B/S和C/S
1.B/S是瀏覽器和客戶端模式,使用HTML語(yǔ)法格式。其使用一問(wèn)一答,即服務(wù)器是無(wú)狀態(tài)的,它不知道客戶端之前是否已經(jīng)訪問(wèn)過(guò)。無(wú)狀態(tài)有助于服務(wù)器高效率而且穩(wěn)定地服務(wù)。但是這種模式對(duì)于物聯(lián)網(wǎng)應(yīng)用的影響是致命的。因?yàn)榉?wù)器無(wú)法主動(dòng)地發(fā)送消息給物聯(lián)設(shè)備。那么,如何改進(jìn)呢?
1)ajax技術(shù)。Ajax技術(shù)最新是為了解決頁(yè)面局部刷新頻繁的效率問(wèn)題的。即一個(gè)HTML頁(yè)面的局部數(shù)據(jù)發(fā)送變化了,在ajax之前需要重新發(fā)送一次請(qǐng)求,來(lái)刷新整個(gè)頁(yè)面。而ajax則是僅僅向服務(wù)器請(qǐng)求發(fā)送變化的數(shù)據(jù)。前者在請(qǐng)求時(shí)會(huì)看到頁(yè)面有閃爍,而后者則沒(méi)有。我們正好可以利用ajax來(lái)定時(shí)向服務(wù)器發(fā)起請(qǐng)求,詢問(wèn)服務(wù)器是否有更新的數(shù)據(jù)。如果詢問(wèn)頻率高,那么實(shí)時(shí)效果就好,但是會(huì)加重服務(wù)器負(fù)擔(dān)。本質(zhì)上,還是一問(wèn)一答的形式,而不是雙向通信。Ajax需要瀏覽器技術(shù)支持。
2)websocket技術(shù)。Websocket是為了解決HTML的雙向通信問(wèn)題而提出的,其在第一條HTTP請(qǐng)求之后會(huì)讓服務(wù)器將后續(xù)的協(xié)議更新到Websocket進(jìn)行通信。Websocket需要tomcat7.0以上的運(yùn)行容器技術(shù)支持。
物聯(lián)網(wǎng)應(yīng)用開(kāi)發(fā)在設(shè)備端可以通過(guò)socket編程來(lái)模擬HTTP協(xié)議,同樣可以模擬HTTP之上的HTML、XML或者Websocket。
C/S客戶端和服務(wù)器編程在智能機(jī)出現(xiàn)之前在PC桌面領(lǐng)域一度被認(rèn)為會(huì)在逐漸被B/S所取代,但是在智能機(jī)設(shè)備端它又煥發(fā)新生。盡管HTML5發(fā)展迅速,但是個(gè)人覺(jué)得瀏覽器在手機(jī)等智能設(shè)備端的體驗(yàn)還是比不上原生APP。而HTML5更大的優(yōu)勢(shì)是其移植性很強(qiáng)。
C/S編程可以直接使用socket通信進(jìn)行通信,那自然不存在雙方通信的問(wèn)題。如果C/S編程使用http類庫(kù)進(jìn)行編程通信,它同樣也會(huì)存在雙向通信的問(wèn)題。
目前看來(lái),很多人都希望沿用J2EE那套業(yè)務(wù)架構(gòu)來(lái)支持物聯(lián)網(wǎng),但是物聯(lián)設(shè)備畢竟是資源有限,有些終端可能是簡(jiǎn)單的單片機(jī),其跑完整的TCP/UDP協(xié)議都比較困難,因此有人提出了精簡(jiǎn)版的TCP/IP協(xié)議,如CoAP(受限制的應(yīng)用協(xié)議(ConstrainedApplicationProtocol)的代名詞)、ucIP、LWIP等等。從業(yè)務(wù)應(yīng)用協(xié)議來(lái)看,IBM研發(fā)的MQTT可能會(huì)成為物聯(lián)網(wǎng)應(yīng)用協(xié)議的標(biāo)準(zhǔn)。
四、 Web編程
Web編程最先指的是瀏覽器展示內(nèi)容的語(yǔ)法編程。Web靜態(tài)語(yǔ)言即是HTML。
1.HTML不支持?jǐn)?shù)據(jù)的動(dòng)態(tài)變化。因此產(chǎn)生了基于解釋引擎的動(dòng)態(tài)語(yǔ)言,如ASP、PHP、JSP等等。這類語(yǔ)言會(huì)使用HTML/CSS來(lái)描述展現(xiàn)樣式,而使用動(dòng)態(tài)語(yǔ)言來(lái)控制數(shù)據(jù)的展現(xiàn),例如訪問(wèn)數(shù)據(jù)庫(kù)獲取新數(shù)據(jù)等等。
需要知道,ASP,PHP,JSP這些語(yǔ)言是服務(wù)器編程語(yǔ)言,當(dāng)用戶通過(guò)瀏覽器訪問(wèn)服務(wù)器對(duì)應(yīng)網(wǎng)頁(yè)時(shí),該網(wǎng)頁(yè)的ASP/PHP/JSP等內(nèi)容會(huì)經(jīng)過(guò)服務(wù)器的解釋引擎轉(zhuǎn)化為具體的數(shù)據(jù),最終和其他的HTML、CSS數(shù)據(jù)一起返回給瀏覽器進(jìn)行展現(xiàn)。因此,瀏覽器得到的永遠(yuǎn)都是確定的HTML、CSS和數(shù)據(jù),不存在ASP/PHP/JSP的語(yǔ)句。
2.javascript腳本。腳本是瀏覽器技術(shù)支持的語(yǔ)法,而不是服務(wù)器技術(shù)支持的。例如一個(gè)登錄界面,要確保用戶輸入的正確性,如不規(guī)則字符,長(zhǎng)度太長(zhǎng)等等,一般會(huì)使用javascript腳本進(jìn)行檢測(cè),而不需要發(fā)送請(qǐng)求給服務(wù)器。上述講到的ajax技術(shù)也是瀏覽器支持的腳本技術(shù)。
3.jQuery,它是對(duì)javascript技術(shù)的封裝,能夠更好地進(jìn)行前端編程控制。
4.HTML/CSS/JS腳本,稱為web前端編程開(kāi)發(fā),而ASP/JSP/PHP等為后端開(kāi)發(fā)。
5.后端開(kāi)發(fā)自然會(huì)涉及到數(shù)據(jù)庫(kù)訪問(wèn)、業(yè)務(wù)邏輯,并且其需要和前端進(jìn)行交互。因此,web應(yīng)用編程架構(gòu)普遍使用MVC編程模型,即M為數(shù)據(jù)模型,負(fù)責(zé)數(shù)據(jù)庫(kù)訪問(wèn);V為視圖,負(fù)責(zé)展現(xiàn);C為控制。MVC模型能夠?qū)φ宫F(xiàn)和數(shù)據(jù)庫(kù)進(jìn)行良好的分離,有助于應(yīng)用開(kāi)發(fā)。
6.作為整體運(yùn)行架構(gòu)來(lái)理解,服務(wù)器需要包括數(shù)據(jù)庫(kù)(如mysql)、web應(yīng)用和解釋引擎和web服務(wù)(如apache和tomcat)。Apache提供http服務(wù)。
7.JSP的基礎(chǔ)是JAVA語(yǔ)法,J2EE架構(gòu)提供servlet技術(shù),用于支持網(wǎng)絡(luò)運(yùn)用。JSP其實(shí)是對(duì)servlet的高級(jí)封裝并作為獨(dú)立的技術(shù)出現(xiàn)的,JSP側(cè)重支持B/S方面的網(wǎng)絡(luò)運(yùn)用,而servlet則通過(guò)映射類的方式支持C/S方式的網(wǎng)絡(luò)運(yùn)用,如微信藍(lán)牙接入和wifi接入的后端技術(shù)即使用servlet進(jìn)行支持, 頂層使用XML/JSON格式。