本發(fā)明屬于嵌入式設(shè)備的系統(tǒng)應(yīng)用技術(shù)領(lǐng)域,特別涉及一種嵌入式設(shè)備的數(shù)據(jù)交互方法及服務(wù)器。
背景技術(shù):
目前大多數(shù)的信息交互平臺(tái)都是基于pc-internet平臺(tái),即采用web的方式來完成信息交互的任務(wù),但由于pc在體積、成本等多方面的因素,使得傳統(tǒng)上以pc作為信息交互平臺(tái)的終端載體已經(jīng)越來越無法滿足人們的需要。
嵌入式系統(tǒng)產(chǎn)品相對于一般的pc來說,具有體積小、成本低、軟硬件均可根據(jù)不同應(yīng)用進(jìn)行定制的特性,隨著嵌入式技術(shù)的飛速發(fā)展,特別是嵌入式微處理能力的大幅提高和操作系統(tǒng)在嵌入式產(chǎn)品中的廣泛應(yīng)用,將嵌入式設(shè)備作為一定領(lǐng)域內(nèi)信息交互的終端載體已經(jīng)成為一種趨勢。
由于嵌入式設(shè)備的很多應(yīng)用需要通過套接字接口處理數(shù)據(jù),為了處理的方便經(jīng)常將底層數(shù)據(jù)的傳遞、交互、存儲(chǔ)和數(shù)據(jù)的判定、數(shù)據(jù)應(yīng)用協(xié)議的處理等都放在同一個(gè)模塊,這樣的處理會(huì)發(fā)使應(yīng)用層和底層數(shù)據(jù)處理耦合緊密,代碼移植性差、出現(xiàn)異常問題不好定位。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于提供一種嵌入式設(shè)備的數(shù)據(jù)交互方法及服務(wù)器,用于解決現(xiàn)有技術(shù)中底層和應(yīng)用層數(shù)據(jù)的處理放在同一個(gè)模塊造成底層和應(yīng)用層數(shù)據(jù)耦合的問題。
為實(shí)現(xiàn)上述目的,本發(fā)明的技術(shù)方案是:
一種嵌入式設(shè)備的數(shù)據(jù)交互方法,該方法包括如下步驟:
1)創(chuàng)建至少一個(gè)服務(wù)器,在服務(wù)器內(nèi)設(shè)置與客戶端一一對應(yīng)的服務(wù)區(qū);
2)檢測服務(wù)器端口是否有客戶端數(shù)據(jù)鏈接請求,若有鏈接請求且鏈接請求有效,將數(shù)據(jù)存儲(chǔ)到與客戶端對應(yīng)的服務(wù)區(qū);
3)應(yīng)用層根據(jù)需要,從服務(wù)區(qū)調(diào)用存儲(chǔ)的數(shù)據(jù),并將所述存儲(chǔ)的數(shù)據(jù)進(jìn)行解析處理。
進(jìn)一步地,當(dāng)應(yīng)用層有數(shù)據(jù)向客戶端發(fā)送時(shí),應(yīng)用層將待發(fā)送的數(shù)據(jù)存放到與客戶端對應(yīng)的服務(wù)區(qū),由服務(wù)區(qū)發(fā)通過相應(yīng)的鏈路送給客戶端。
進(jìn)一步地,如果客戶端數(shù)據(jù)鏈接請求出現(xiàn)異?;虺瑫r(shí),則關(guān)閉鏈接請求。
進(jìn)一步地,服務(wù)器在創(chuàng)建的時(shí)候,根據(jù)應(yīng)用情況,設(shè)置相應(yīng)的服務(wù)區(qū)任務(wù)優(yōu)先級(jí)。
本發(fā)明還提供了一種服務(wù)器,所述服務(wù)器包括檢測模塊、存儲(chǔ)模塊和通訊接口模塊,所述檢測模塊用于實(shí)時(shí)檢測客戶端的數(shù)據(jù)鏈接請求,若鏈接請求有效,建立與該客戶端的之間的鏈路;所述存儲(chǔ)模塊包括與客戶端一一對應(yīng)的服務(wù)區(qū),用于存儲(chǔ)客戶端的請求數(shù)據(jù);所述通訊接口模塊用于供應(yīng)用層從所述服務(wù)區(qū)調(diào)用存儲(chǔ)的數(shù)據(jù)并解析處理。
進(jìn)一步地,當(dāng)應(yīng)用層有數(shù)據(jù)向客戶端發(fā)送時(shí),應(yīng)用層將待發(fā)送的數(shù)據(jù)發(fā)送給服務(wù)區(qū),由服務(wù)區(qū)發(fā)送給客戶端。
進(jìn)一步地,如果客戶端數(shù)據(jù)鏈接請求出現(xiàn)異常或超時(shí),則關(guān)閉鏈接請求。
進(jìn)一步地,服務(wù)器在創(chuàng)建的時(shí)候,根據(jù)應(yīng)用情況,設(shè)置相應(yīng)的服務(wù)器優(yōu)先級(jí)。
本發(fā)明的有益效果是:
本發(fā)明通過創(chuàng)建服務(wù)器,在服務(wù)器內(nèi)設(shè)置與客戶端一一對應(yīng)的服務(wù)區(qū);然后檢測服務(wù)器端口是否有客戶端數(shù)據(jù)鏈接請求,若有鏈接請求且鏈接請求有效,將數(shù)據(jù)存儲(chǔ)到與客戶端對應(yīng)的服務(wù)區(qū);應(yīng)用層根據(jù)需要,從服務(wù)區(qū)調(diào)用存儲(chǔ)的數(shù)據(jù),并將所述存儲(chǔ)的數(shù)據(jù)進(jìn)行解析處理,本發(fā)明通過創(chuàng)建的服務(wù)器替代了原來的底層,將應(yīng)用層和底層的數(shù)據(jù)處理隔開,底層數(shù)據(jù)的收發(fā)和存儲(chǔ)影響應(yīng)用層的數(shù)據(jù)處理,應(yīng)用層的數(shù)據(jù)處理也不影響底層數(shù)據(jù)的處理,降低底層和應(yīng)用層數(shù)據(jù)的耦合,出現(xiàn)問題容易定位。
附圖說明
圖1為本發(fā)明的嵌入式設(shè)備的數(shù)據(jù)交互方法示意圖;
圖2為本發(fā)明的服務(wù)器的創(chuàng)建示意圖;
圖3為本發(fā)明的服務(wù)器應(yīng)用場景示意圖。
具體實(shí)施方式
下面結(jié)合附圖對本發(fā)明的具體實(shí)施方式作進(jìn)一步的說明:
本發(fā)明的一種服務(wù)器的實(shí)施例:
基于tcpip協(xié)議棧、利用套接字接口創(chuàng)建用于以太網(wǎng)數(shù)據(jù)交互和存儲(chǔ)的服務(wù)器,用于接收客戶端數(shù)據(jù),并根據(jù)應(yīng)用層的需要向客戶端發(fā)送數(shù)據(jù),一個(gè)服務(wù)器包含多個(gè)數(shù)據(jù)處理區(qū),服務(wù)器本身并不解析數(shù)據(jù)。服務(wù)器只用于處理數(shù)據(jù)的接收、發(fā)送和存儲(chǔ),數(shù)據(jù)的判定、解析和反饋完全交由應(yīng)用層處理。服務(wù)器為上層應(yīng)用提供通用的apis,和具體的數(shù)據(jù)類型、協(xié)議沒有關(guān)系,因此服務(wù)器模塊和上層應(yīng)用耦合性很小。一個(gè)服務(wù)器可以支持多種不同的應(yīng)用模塊數(shù)據(jù)的處理,當(dāng)然也可以在一個(gè)嵌入式設(shè)備里面創(chuàng)建多個(gè)服務(wù)器來滿足應(yīng)用處理的需求,下面以一個(gè)服務(wù)器為例來說明。
在創(chuàng)建服務(wù)器的時(shí)候首先要設(shè)置服務(wù)器參數(shù),服務(wù)器參數(shù)包括本地ip、本地端口port、客戶端ip組、客戶端數(shù)量、服務(wù)器模式mode、服務(wù)器優(yōu)先級(jí)priority、超時(shí)時(shí)間timeout。
客戶端ip、數(shù)量:在創(chuàng)建服務(wù)器之前,需要根據(jù)客戶端數(shù)量和客戶端的信息(ip、數(shù)量等),將所有客戶端ip信息放在一個(gè)數(shù)組里面,傳遞給服務(wù)器創(chuàng)建函數(shù)。服務(wù)器創(chuàng)建的時(shí)候會(huì)根據(jù)數(shù)組包含的客戶端信息的順序給相應(yīng)的客戶端分配服務(wù)區(qū),服務(wù)器會(huì)創(chuàng)建和客戶端相同數(shù)量的服務(wù)區(qū),允許多客戶端訪問。
如果對客戶端的ip、數(shù)量信息沒有特殊要求,那么客戶端配置數(shù)量為0,配置ip數(shù)組為空,服務(wù)器創(chuàng)建完成之后,監(jiān)聽任務(wù)將監(jiān)聽任何客戶端的接入請求,并且只提供一個(gè)服務(wù)區(qū)用來處理數(shù)據(jù)交互,允許最多一個(gè)客戶端連接。服務(wù)器的本地ip配置為0時(shí),裝置的所有網(wǎng)口(支持協(xié)議棧的接口)都可以監(jiān)聽客戶端數(shù)據(jù)并創(chuàng)建數(shù)據(jù)通道。否則,只有指定(和設(shè)置的本地ip對應(yīng))的網(wǎng)口可以監(jiān)聽客戶端數(shù)據(jù)并創(chuàng)建數(shù)據(jù)通道。服務(wù)器創(chuàng)建的時(shí)候,可以根據(jù)需要確定是否服務(wù)器是否綁定網(wǎng)卡ip,如果綁定網(wǎng)卡ip,那么客戶端只能通過指定ip對應(yīng)的網(wǎng)口訪問服務(wù)器;否則,客戶端可以通過設(shè)備所有的網(wǎng)卡訪問服務(wù)器。
服務(wù)器的本地port配置為0時(shí),在服務(wù)器套接字bind()之后,會(huì)隨機(jī)分配一個(gè)值在1024到5000之間的唯一的端口。應(yīng)用程序可在bind()后用getsockname()來獲知所分配的地址。
服務(wù)器模式(mode)可以根據(jù)應(yīng)用需要配置成只發(fā)、只收或者收發(fā)全雙工模式,這個(gè)參數(shù)決定了一個(gè)服務(wù)器內(nèi)的所有服務(wù)區(qū)的模式。
服務(wù)期優(yōu)先級(jí)(priority)決定了一個(gè)服務(wù)器內(nèi)所有服務(wù)區(qū)數(shù)據(jù)處理任務(wù)的優(yōu)先級(jí)。
如果應(yīng)用對數(shù)據(jù)報(bào)文間隔時(shí)間有嚴(yán)格要求的話,就需要配置服務(wù)器超時(shí)時(shí)間(timeout),服務(wù)器就會(huì)進(jìn)行判斷,如果超時(shí)就返回異常提示。如果應(yīng)用對數(shù)據(jù)報(bào)文間隔時(shí)間沒有要求的話,該參數(shù)配置為0。
所創(chuàng)建的服務(wù)器模塊包括檢測模塊、存儲(chǔ)模塊和通訊接口模塊,且服務(wù)器創(chuàng)建的時(shí)候可以根據(jù)客戶端的數(shù)量對應(yīng)設(shè)置服務(wù)區(qū)的數(shù)量,不指定客戶端是服務(wù)器默認(rèn)一個(gè)服務(wù)區(qū),如圖1所示,本實(shí)施例的每個(gè)客戶端對應(yīng)一個(gè)服務(wù)區(qū),圖1中的通道用于存儲(chǔ)客戶端的請求數(shù)據(jù)。服務(wù)器創(chuàng)建完成后,會(huì)生成并啟動(dòng)兩個(gè)任務(wù):服務(wù)器監(jiān)聽任務(wù)、服務(wù)區(qū)數(shù)據(jù)處理任務(wù)(每個(gè)客戶端分配一個(gè)服務(wù)區(qū)任務(wù)),具體的如圖2所示,其中檢測模塊對應(yīng)的是服務(wù)器監(jiān)聽任務(wù),存儲(chǔ)模塊對應(yīng)的是服務(wù)區(qū),通訊接口模塊用于供應(yīng)用層從服務(wù)區(qū)調(diào)用存儲(chǔ)的數(shù)據(jù)并解析處理。
服務(wù)器監(jiān)聽任務(wù):
數(shù)據(jù)監(jiān)聽任務(wù)在啟動(dòng)之后會(huì)實(shí)時(shí)的監(jiān)聽客戶端接入請求。
若有客戶端接入,則檢查各個(gè)服務(wù)區(qū)(檢查服務(wù)區(qū)個(gè)數(shù)由創(chuàng)建服務(wù)器時(shí)的客戶端數(shù)量決定)的客戶端配置信息,如果滿足則將socket接入該服務(wù)區(qū),并向?qū)?yīng)服務(wù)區(qū)數(shù)據(jù)處理任務(wù)發(fā)送觸發(fā)信號(hào),激活服務(wù)區(qū)任務(wù),然后監(jiān)聽任務(wù)繼續(xù)監(jiān)聽。
如果沒有符合條件的服務(wù)區(qū),則關(guān)閉客戶端socket請求并繼續(xù)監(jiān)聽。
服務(wù)區(qū)數(shù)據(jù)處理任務(wù):
在創(chuàng)建服務(wù)器的時(shí)候,會(huì)根據(jù)配置參數(shù)創(chuàng)建并啟動(dòng)服務(wù)區(qū)的數(shù)據(jù)處理任務(wù)。
服務(wù)區(qū)數(shù)據(jù)處理任務(wù)啟動(dòng)之后一直等待監(jiān)聽任務(wù)的觸發(fā)信號(hào)。如果觸發(fā)信號(hào)被激活,那么服務(wù)區(qū)的任務(wù)會(huì)根據(jù)配置來確定進(jìn)行數(shù)據(jù)的發(fā)送、接收、超時(shí)檢測等工作,除非出現(xiàn)客戶端關(guān)閉鏈接、數(shù)據(jù)異常、數(shù)據(jù)超時(shí)情況,該服務(wù)區(qū)的數(shù)據(jù)處理任務(wù)會(huì)一致循環(huán)執(zhí)行。具體的為:如果服務(wù)器模式配置有接收模式,那么數(shù)據(jù)處理任務(wù)會(huì)檢測鏈路數(shù)據(jù)狀態(tài),由數(shù)據(jù)接收服務(wù)判斷通道是否有數(shù)據(jù),如果有數(shù)據(jù)則存儲(chǔ)到數(shù)據(jù)緩沖區(qū),等待應(yīng)用獲取,數(shù)據(jù)發(fā)送服務(wù)判斷服務(wù)器的數(shù)據(jù)接收緩沖區(qū)是否有數(shù)據(jù)需要發(fā)送,有的話就啟動(dòng)數(shù)據(jù)發(fā)送。
如果服務(wù)器模式配置有發(fā)送模式,那么數(shù)據(jù)處理任務(wù)會(huì)檢測服務(wù)區(qū)的數(shù)據(jù)發(fā)送緩沖區(qū),如果有應(yīng)用需要發(fā)送的數(shù)據(jù),就會(huì)立即起送數(shù)據(jù)發(fā)送。
在接收、發(fā)送數(shù)據(jù)過程中如果發(fā)生異常,則立即退出服務(wù)區(qū)數(shù)據(jù)處理任務(wù),釋放當(dāng)前句柄、釋放服務(wù)區(qū)資源。
如果創(chuàng)建服務(wù)器的時(shí)候配置了超時(shí)時(shí)間,那么數(shù)據(jù)處理任務(wù)會(huì)檢測鏈路數(shù)據(jù)超時(shí)情況,一旦超過設(shè)置的超時(shí)時(shí)間鏈路還沒有數(shù)據(jù),那么就會(huì)判定鏈路異常,退出服務(wù)區(qū)數(shù)據(jù)處理任務(wù),釋放當(dāng)前句柄、釋放服務(wù)區(qū)資源。
此外,服務(wù)器為上層應(yīng)用提供的通訊接口模塊,用來處理應(yīng)用層和客戶端之間的數(shù)據(jù)交互,包括以下接口:
數(shù)據(jù)發(fā)送接口:將需要發(fā)送的數(shù)據(jù)寫入指定服務(wù)區(qū)的發(fā)送數(shù)據(jù)緩沖區(qū)即可。服務(wù)區(qū)的數(shù)據(jù)處理任務(wù)會(huì)自動(dòng)檢測發(fā)送服務(wù)區(qū)數(shù)據(jù)的更新并啟動(dòng)發(fā)送。
數(shù)據(jù)接收接口:判斷指定服務(wù)區(qū)的接收數(shù)據(jù)緩沖區(qū)是否更新數(shù)據(jù),如果有數(shù)據(jù)和更新,則取出相應(yīng)數(shù)據(jù)。
控制接口:根據(jù)不同的指令,支持不同的控制服務(wù),比如可以控制強(qiáng)行關(guān)閉指定的服務(wù)區(qū)等等。
獲取客戶端信息的接口:可以用來獲取和指定服務(wù)區(qū)通訊的客戶端的信息(ip、port等)。
獲取指定服務(wù)區(qū)當(dāng)前狀態(tài)的接口:可以獲取指定服務(wù)區(qū)當(dāng)前的狀態(tài):初始化狀態(tài)(創(chuàng)建服務(wù)器時(shí)的狀態(tài))、等待狀態(tài)(沒有客戶端接入時(shí)的狀態(tài))、運(yùn)行狀態(tài)(服務(wù)器數(shù)據(jù)處理任務(wù)被激活狀態(tài))。
本發(fā)明還提供了一種嵌入式設(shè)備的數(shù)據(jù)交互方法,由于該方法的具體實(shí)施方式已經(jīng)在上述實(shí)施例中進(jìn)行了詳細(xì)的說明,因此在這里不再贅述。
以上給出了具體的實(shí)施方式,但本發(fā)明不局限于以上所描述的實(shí)施方式。本發(fā)明的基本思路在于上述基本方案,對本領(lǐng)域普通技術(shù)人員而言,根據(jù)本發(fā)明的教導(dǎo),設(shè)計(jì)出各種變形的模型、公式、參數(shù)并不需要花費(fèi)創(chuàng)造性勞動(dòng)。在不脫離本發(fā)明的原理和精神的情況下對實(shí)施方式進(jìn)行的變化、修改、替換和變型仍落入本發(fā)明的保護(hù)范圍內(nèi)。