欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

數(shù)據(jù)通信方法及裝置與流程

文檔序號:11406914閱讀:261來源:國知局
數(shù)據(jù)通信方法及裝置與流程

本發(fā)明涉及通信技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)通信方法及裝置。



背景技術(shù):

隨著智能家居技術(shù)的不斷發(fā)展,智能家居終端不再僅限于手機、平板電腦,目前也支持嵌入式終端控制器等。嵌入式終端控制器中的通信是基于osi七層協(xié)議模型中應(yīng)用層與底層之間的通信,在控制器中安裝有嵌入式app,app需要快速高效地與底層進行通信,包括進行狀態(tài)查詢和控制等。目前嵌入式app的通信方式基于udp、tcp、http/https等,基本原理都為新建socket并通過指定ip、port進行發(fā)送數(shù)據(jù)、接收數(shù)據(jù)。通信鏈路有的是長連接,有的是短連接。短連接是指通信鏈路只負責數(shù)據(jù)的發(fā)送,數(shù)據(jù)發(fā)送完畢通信鏈路斷開;長連接是指通信鏈路的生命周期貫穿某一幀數(shù)據(jù)的發(fā)送以及接收,接收完畢通信鏈路斷開。長連接或短連接的通信鏈路都會導(dǎo)致app或者底層程序中發(fā)送和接收數(shù)據(jù)的線程多而雜,且數(shù)據(jù)鏈路也因不同功能而數(shù)量較多,在優(yōu)化程序時對于多線程和多數(shù)據(jù)鏈路的管理尤為復(fù)雜,并且在實際的使用過程中,由于多線程和多數(shù)據(jù)鏈路的并發(fā)容易造成系統(tǒng)cpu資源的占用率過高、電路板溫度較高、硬件使用壽命較短等問題。



技術(shù)實現(xiàn)要素:

有鑒于此,本發(fā)明要解決的一個技術(shù)問題是提供一種數(shù)據(jù)通信方法及裝置,在app運行期間通過數(shù)據(jù)鏈路與底層通信服務(wù)端進行通信,并基于發(fā)送任務(wù)池以及任務(wù)發(fā)送優(yōu)先規(guī)則進行數(shù)據(jù)的發(fā)送。

根據(jù)本發(fā)明的一個方面,提供一種數(shù)據(jù)通信方法,包括:在app運行時,建立數(shù)據(jù)鏈路;創(chuàng)建發(fā)送任務(wù)池和接收任務(wù)池;基于任務(wù)發(fā)送優(yōu)先規(guī)則從所述發(fā)送任務(wù)池中獲取所述第一數(shù)據(jù),并通過所述數(shù)據(jù)鏈路發(fā)送給底層通信服務(wù)端;通過所述數(shù)據(jù)鏈路接收由所述底層通信服務(wù)端發(fā)送的第二數(shù)據(jù),將所述第二數(shù)據(jù)加入所述接收任務(wù)池中并進行相應(yīng)地處理;當所述app退出時,則關(guān)閉所述數(shù)據(jù)鏈路。

可選地,啟動發(fā)送線程和接收線程;所述接收線程輪詢所述發(fā)送任務(wù)池,當確定所述發(fā)送任務(wù)池中有第一數(shù)據(jù)時,獲取所述第一數(shù)據(jù)并通過所述數(shù)據(jù)鏈路發(fā)送給所述底層通信服務(wù)端;所述接收線程對所述數(shù)據(jù)鏈路進行輪詢,當確定通過所述數(shù)據(jù)鏈路接收到所述底層通信服務(wù)端發(fā)送的第二數(shù)據(jù)時,獲取所述第二數(shù)據(jù)并加所述接收任務(wù)池中。

可選地,基于任務(wù)發(fā)送優(yōu)先規(guī)則從所述發(fā)送任務(wù)池中獲取所述第一數(shù)據(jù)、并通過所述數(shù)據(jù)鏈路發(fā)送給底層通信服務(wù)端包括:確定所述第一數(shù)據(jù)的優(yōu)先級,按照優(yōu)先級高低順序獲取所述第一數(shù)據(jù);將獲取的所述第一數(shù)據(jù)通過所述數(shù)據(jù)鏈路發(fā)送給底層通信服務(wù)端,并將此第一數(shù)據(jù)從所述發(fā)送任務(wù)池中移除。

可選地,如果所述第一數(shù)據(jù)的優(yōu)先級相同,則按照加入所述發(fā)送任務(wù)池的順序獲取具有相同優(yōu)先級的所述第一數(shù)據(jù)。

可選地,接收到發(fā)送任務(wù)數(shù)據(jù),確定所述發(fā)送任務(wù)數(shù)據(jù)的優(yōu)先級;將所述發(fā)送任務(wù)數(shù)據(jù)轉(zhuǎn)換為具有第一數(shù)據(jù)格式的所述第一數(shù)據(jù),并將所述第一數(shù)據(jù)加入到所述發(fā)送任務(wù)池中;其中,所述第一數(shù)據(jù)包含有所述發(fā)送任務(wù)數(shù)據(jù)的優(yōu)先級、數(shù)據(jù)轉(zhuǎn)換時間。

可選地,所述發(fā)送任務(wù)數(shù)據(jù)包括:控制幀和查詢幀;將所述控制幀和所述查詢幀轉(zhuǎn)換為具有第一數(shù)據(jù)格式的控制任務(wù)數(shù)據(jù)和查詢?nèi)蝿?wù)數(shù)據(jù);其中,所述控制幀的優(yōu)先級高于所述查詢幀的優(yōu)先級。

可選地,獲取所述控制任務(wù)數(shù)據(jù)和所述查詢?nèi)蝿?wù)數(shù)據(jù)中的數(shù)據(jù)轉(zhuǎn)換時間,根據(jù)所述數(shù)據(jù)轉(zhuǎn)換時間的順序獲取所述控制任務(wù)數(shù)據(jù)和所述查詢?nèi)蝿?wù)數(shù)據(jù);當確定需要獲取的數(shù)據(jù)是所述查詢?nèi)蝿?wù)數(shù)據(jù)時,判斷在所述發(fā)送任務(wù)池中是否存在與此查詢?nèi)蝿?wù)數(shù)據(jù)的數(shù)據(jù)轉(zhuǎn)換時間的時間差值小于時間閾值的所述控制任務(wù)數(shù)據(jù);如果存在,則獲取此控制任務(wù)數(shù)據(jù)并通過所述數(shù)據(jù)鏈路發(fā)送給底層通信服務(wù)端,如果不存在,則獲取此查詢?nèi)蝿?wù)數(shù)據(jù)并通過所述數(shù)據(jù)鏈路發(fā)送給底層通信服務(wù)端。

可選地,從所述接收任務(wù)池中獲取所述第二數(shù)據(jù),確定所述第二數(shù)據(jù)的數(shù)據(jù)類型;將所述第二數(shù)據(jù)轉(zhuǎn)換為具有與所述數(shù)據(jù)類型對應(yīng)的數(shù)據(jù)格式的接收數(shù)據(jù),并將此第二數(shù)據(jù)從所述接收任務(wù)池中移除;基于預(yù)設(shè)的處理規(guī)則對所述接收數(shù)據(jù)進行處理。

可選地,所述數(shù)據(jù)類型包括:查詢響應(yīng)數(shù)據(jù)類型、控制響應(yīng)類型;將所述第二數(shù)據(jù)轉(zhuǎn)換為具有與所述查詢響應(yīng)類型對應(yīng)的數(shù)據(jù)格式的查詢?nèi)蝿?wù)響應(yīng)數(shù)據(jù),或者將所述第二數(shù)據(jù)轉(zhuǎn)換為具有與所述控制響應(yīng)類型對應(yīng)的數(shù)據(jù)格式的控制任務(wù)響應(yīng)數(shù)據(jù);所述基于預(yù)設(shè)的處理規(guī)則對所述接收數(shù)據(jù)進行處理包括:在所述app界面上顯示所述查詢?nèi)蝿?wù)響應(yīng)數(shù)據(jù)和/或所述控制任務(wù)響應(yīng)數(shù)據(jù)。

可選地,所述建立數(shù)據(jù)鏈路包括:創(chuàng)建本地套接字localsocket,獲取所述localsocket的輸入流inputstream和輸出流outputstream;通過所述outputstream向所述底層通信服務(wù)端發(fā)送所述第一數(shù)據(jù),通過所述inputstream接收所述底層通信服務(wù)端發(fā)送的第二數(shù)據(jù)。

根據(jù)本發(fā)明的另一方面,提供一種數(shù)據(jù)通信裝置,包括:鏈路建立模塊,用于在app運行時,建立數(shù)據(jù)鏈路;任務(wù)池建立模塊,用于創(chuàng)建發(fā)送任務(wù)池和接收任務(wù)池;發(fā)送處理模塊,用于基于任務(wù)發(fā)送優(yōu)先規(guī)則從所述發(fā)送任務(wù)池中獲取所述第一數(shù)據(jù),并通過所述數(shù)據(jù)鏈路發(fā)送給底層通信服務(wù)端;接收處理模塊,用于通過所述數(shù)據(jù)鏈路接收由所述底層通信服務(wù)端發(fā)送的第二數(shù)據(jù),將所述第二數(shù)據(jù)加入所述接收任務(wù)池中并進行相應(yīng)地處理;鏈路關(guān)閉模塊,用于當所述app退出時,則關(guān)閉所述數(shù)據(jù)鏈路。

可選地,所述發(fā)送處理模塊,用于啟動發(fā)送線程;所述接收線程輪詢所述發(fā)送任務(wù)池,當確定所述發(fā)送任務(wù)池中有第一數(shù)據(jù)時,獲取所述第一數(shù)據(jù)并通過所述數(shù)據(jù)鏈路發(fā)送給所述底層通信服務(wù)端;所述接收處理模塊,還用于啟動接收線程;所述接收線程對所述數(shù)據(jù)鏈路進行輪詢,當確定通過所述數(shù)據(jù)鏈路接收到所述底層通信服務(wù)端發(fā)送的第二數(shù)據(jù)時,獲取所述第二數(shù)據(jù)并加入所述接收任務(wù)池中。

可選地,所述發(fā)送處理模塊,還包括:優(yōu)先級確定單元,用于確定所述第一數(shù)據(jù)的優(yōu)先級;數(shù)據(jù)獲取單元,用于按照優(yōu)先級高低順序獲取所述第一數(shù)據(jù);數(shù)據(jù)發(fā)送單元,用于將獲取的所述第一數(shù)據(jù)通過所述數(shù)據(jù)鏈路發(fā)送給底層通信服務(wù)端;數(shù)據(jù)移除單元,用于將此第一數(shù)據(jù)從所述發(fā)送任務(wù)池中移除。

可選地,所述數(shù)據(jù)獲取單元,還用于如果所述第一數(shù)據(jù)的優(yōu)先級相同,則按照加入所述發(fā)送任務(wù)池的順序獲取具有相同優(yōu)先級的所述第一數(shù)據(jù)。

可選地,所述數(shù)據(jù)轉(zhuǎn)換模塊,用于接收發(fā)送任務(wù)數(shù)據(jù),確定所述發(fā)送任務(wù)數(shù)據(jù)的優(yōu)先級;將所述發(fā)送任務(wù)數(shù)據(jù)轉(zhuǎn)換為具有第一數(shù)據(jù)格式的所述第一數(shù)據(jù),并將所述第一數(shù)據(jù)加入到所述發(fā)送任務(wù)池中;其中,所述第一數(shù)據(jù)包含有所述發(fā)送任務(wù)數(shù)據(jù)的優(yōu)先級、數(shù)據(jù)轉(zhuǎn)換時間。

可選地,所述發(fā)送任務(wù)數(shù)據(jù)包括:控制幀和查詢幀;所述數(shù)據(jù)轉(zhuǎn)換模塊,還用于將所述控制幀和所述查詢幀轉(zhuǎn)換為具有第一數(shù)據(jù)格式的控制任務(wù)數(shù)據(jù)和查詢?nèi)蝿?wù)數(shù)據(jù);其中,所述控制幀的優(yōu)先級高于所述查詢幀的優(yōu)先級。

可選地,所述數(shù)據(jù)獲取單元,還用于獲取所述控制任務(wù)數(shù)據(jù)和所述查詢?nèi)蝿?wù)數(shù)據(jù)中的數(shù)據(jù)轉(zhuǎn)換時間,在所述發(fā)送任務(wù)池中根據(jù)所述數(shù)據(jù)轉(zhuǎn)換時間的順序獲取所述控制任務(wù)數(shù)據(jù)和所述查詢?nèi)蝿?wù)數(shù)據(jù);當確定需要獲取的數(shù)據(jù)是所述查詢?nèi)蝿?wù)數(shù)據(jù)時,判斷是否存在與此查詢?nèi)蝿?wù)數(shù)據(jù)的數(shù)據(jù)轉(zhuǎn)換時間的時間差值小于時間閾值的所述控制任務(wù)數(shù)據(jù);如果存在,則獲取此控制任務(wù)數(shù)據(jù),如果不存在,則獲取此查詢?nèi)蝿?wù)數(shù)據(jù);所述數(shù)據(jù)發(fā)送單元,還用于將獲取的所述查詢?nèi)蝿?wù)數(shù)據(jù)和所述控制任務(wù)數(shù)據(jù)通過所述數(shù)據(jù)鏈路發(fā)送給底層通信服務(wù)端。

可選地,所述接收處理模塊,包括:數(shù)據(jù)接收單元,用于從所述接收任務(wù)池中獲取所述第二數(shù)據(jù);類型確定單元,用于確定所述第二數(shù)據(jù)的數(shù)據(jù)類型;數(shù)據(jù)整合單元,用于將所述第二數(shù)據(jù)轉(zhuǎn)換為具有與所述數(shù)據(jù)類型對應(yīng)的數(shù)據(jù)格式的接收數(shù)據(jù),并將此第二數(shù)據(jù)從所述接收任務(wù)池中移除;數(shù)據(jù)處理單元,用于基于預(yù)設(shè)的處理規(guī)則對所述接收數(shù)據(jù)進行處理。

可選地,所述數(shù)據(jù)類型包括:查詢響應(yīng)數(shù)據(jù)類型、控制響應(yīng)類型;所述數(shù)據(jù)整合單元,還用于將所述第二數(shù)據(jù)轉(zhuǎn)換為具有與所述查詢響應(yīng)類型對應(yīng)的數(shù)據(jù)格式的查詢?nèi)蝿?wù)響應(yīng)數(shù)據(jù),或者將所述第二數(shù)據(jù)轉(zhuǎn)換為具有與所述控制響應(yīng)類型對應(yīng)的數(shù)據(jù)格式的控制任務(wù)響應(yīng)數(shù)據(jù);所述數(shù)據(jù)處理單元,還用于在所述app界面上顯示所述查詢?nèi)蝿?wù)響應(yīng)數(shù)據(jù)和/或所述控制任務(wù)響應(yīng)數(shù)據(jù)。

可選地,所述鏈路建立模塊,還用于創(chuàng)建本地套接字localsocket,獲取所述localsocket的輸入流inputstream和輸出流outputstream;所述發(fā)送處理模塊,還用于通過所述outputstream向所述底層通信服務(wù)端發(fā)送所述第一數(shù)據(jù);所述接收處理模塊,還用于通過所述inputstream接收所述底層通信服務(wù)端發(fā)送的第二數(shù)據(jù)。

本發(fā)明的數(shù)據(jù)通信方法及裝置,在app運行期間通過數(shù)據(jù)鏈路與底層通信服務(wù)端進行通信,并基于發(fā)送任務(wù)池以及任務(wù)發(fā)送優(yōu)先規(guī)則進行數(shù)據(jù)的發(fā)送,能夠?qū)崿F(xiàn)控制數(shù)據(jù)發(fā)送以及接收的排隊機制,使數(shù)據(jù)可以有序發(fā)送和接收,能夠有效控制數(shù)據(jù)通信中的多線程、多鏈路并發(fā),能夠優(yōu)化通信流程。

附圖說明

為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。

圖1為根據(jù)本發(fā)明的數(shù)據(jù)通信方法的一個實施例的流程示意圖;

圖2為根據(jù)本發(fā)明的數(shù)據(jù)通信方法的一個實施例的通信機制示意圖;

圖3為根據(jù)本發(fā)明的數(shù)據(jù)通信方法的一個實施例中發(fā)送數(shù)據(jù)的流程示意圖;

圖4為根據(jù)本發(fā)明的數(shù)據(jù)通信方法的一個實施例中接收數(shù)據(jù)的流程示意圖;

圖5為根據(jù)本發(fā)明的數(shù)據(jù)通信裝置的一個實施例的模塊示意圖;

圖6為根據(jù)本發(fā)明的數(shù)據(jù)通信裝置的一個實施例中發(fā)送處理模塊的模塊示意圖;

圖7為根據(jù)本發(fā)明的數(shù)據(jù)通信裝置的一個實施例中接收處理模塊的模塊示意圖

具體實施方式

下面參照附圖對本發(fā)明進行更全面的描述,其中說明本發(fā)明的示例性實施例。下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。下面結(jié)合各個圖和實施例對本發(fā)明的技術(shù)方案進行多方面的描述。

下文中的“第一”、“第二”等僅用于描述上相區(qū)別,并沒有其它特殊的含義。

圖1為根據(jù)本發(fā)明的數(shù)據(jù)通信方法的一個實施例的流程示意圖,如圖1所示:

步驟101,在app運行時,建立數(shù)據(jù)鏈路。app可以為嵌入式app等。

步驟102,創(chuàng)建發(fā)送任務(wù)池和接收任務(wù)池。發(fā)送任務(wù)池和接收任務(wù)池可以實現(xiàn)為隊列等。

步驟103,基于任務(wù)發(fā)送優(yōu)先規(guī)則從發(fā)送任務(wù)池中獲取第一數(shù)據(jù),并通過數(shù)據(jù)鏈路發(fā)送給底層通信服務(wù)端。任務(wù)發(fā)送優(yōu)先規(guī)則可以根據(jù)發(fā)送的數(shù)據(jù)類型等進行設(shè)置,可以有多種。

步驟104,通過數(shù)據(jù)鏈路接收由底層通信服務(wù)端發(fā)送的第二數(shù)據(jù),將第二數(shù)據(jù)加入接收任務(wù)池中并進行相應(yīng)地處理。

步驟105,當app退出時,則關(guān)閉數(shù)據(jù)鏈路。

在上述的實施例中,在app運行時建立數(shù)據(jù)鏈接,app退出時數(shù)據(jù)鏈路關(guān)閉,將數(shù)據(jù)鏈路的生命周期與app的生命周期綁定起來,在app運行的過程中數(shù)據(jù)鏈路一直保持通暢??梢圆捎靡粋€數(shù)據(jù)鏈路負責app所有的功能模塊與底層通信服務(wù)端的數(shù)據(jù)通信(包括發(fā)送、接收),采用排隊機制管理數(shù)據(jù)的有序發(fā)送和接收。

在一個實施例中,app可以采用異步方式發(fā)送、接收數(shù)據(jù)。啟動發(fā)送線程和接收線程,接收線程輪詢發(fā)送任務(wù)池,當確定發(fā)送任務(wù)池中有第一數(shù)據(jù)時,獲取第一數(shù)據(jù)并通過數(shù)據(jù)鏈路發(fā)送給底層通信服務(wù)端。接收線程對數(shù)據(jù)鏈路進行輪詢,當確定通過數(shù)據(jù)鏈路接收到底層通信服務(wù)端發(fā)送的第二數(shù)據(jù)時,獲取第二數(shù)據(jù)并加接收任務(wù)池中。使用發(fā)送線程、接收線程分別發(fā)送數(shù)據(jù)、接收數(shù)據(jù),與app的ui等線程分開工作,能夠避免發(fā)生阻塞。

在操作系統(tǒng)系統(tǒng)啟動時,創(chuàng)建底層通信服務(wù),可以創(chuàng)建通信進程,底層通信服務(wù)端能夠與外部的設(shè)備、機組等進行通信。app在應(yīng)用層中運行時建立數(shù)據(jù)鏈路,通過數(shù)據(jù)鏈路與底層通信服務(wù)端進行數(shù)據(jù)通信。底層通信服務(wù)端和數(shù)據(jù)鏈路可以有多種實現(xiàn)方式。

例如,如圖2所示,在安卓系統(tǒng)中,系統(tǒng)運行時創(chuàng)建底層通信服務(wù)。創(chuàng)建localserversocket,并通過localserversocket的outputstream和inputstream進行數(shù)據(jù)通信。app在運行時創(chuàng)建本地套接字localsocket,獲取localsocket的輸入流inputstream和輸出流outputstream,通過outputstream向底層通信服務(wù)端發(fā)送第一數(shù)據(jù),通過inputstream接收底層通信服務(wù)端發(fā)送的第二數(shù)據(jù)。

安卓系統(tǒng)基于unix,app可以在unix域名空間內(nèi)創(chuàng)建一個localsocket(非服務(wù)器),localsocket完全不同于java.net.socket,app可以通過localsocket與安卓系統(tǒng)的底層通信,localserversocket是底層通信服務(wù),能夠與機組或者設(shè)備通過uart、rs485等進行通信。

啟動用于發(fā)送數(shù)據(jù)的發(fā)送線程,將app的各個功能模塊發(fā)出的數(shù)據(jù),如查詢幀、控制幀等,通過outputstream向底層通信服務(wù)端發(fā)送。啟動用于接收數(shù)據(jù)的線程,通過inputstream接收底層通信服務(wù)端發(fā)送的數(shù)據(jù),包括查詢返回幀、控制返回幀等,將接收的數(shù)據(jù)發(fā)送給app的各個功能模塊進行顯示。

圖3為根據(jù)本發(fā)明的數(shù)據(jù)通信方法的一個實施例中發(fā)送數(shù)據(jù)的流程示意圖,如圖3所示:

步驟301,當app啟動時,創(chuàng)建localsocket。

步驟302,獲取輸出流outputstream。

步驟303,創(chuàng)建發(fā)送任務(wù)池、接收線程。

步驟304,接收控制數(shù)據(jù)幀、查詢數(shù)據(jù)幀。

步驟305,分配發(fā)送任務(wù)數(shù)據(jù)的優(yōu)先級。

步驟306,將控制數(shù)據(jù)幀、查詢數(shù)據(jù)幀轉(zhuǎn)換為控制任務(wù)數(shù)據(jù)、查詢?nèi)蝿?wù)數(shù)據(jù)。

步驟307,將控制任務(wù)數(shù)據(jù)、查詢?nèi)蝿?wù)數(shù)據(jù)加入到發(fā)送任務(wù)池中。

步驟308,發(fā)送線程輪詢發(fā)送任務(wù)池,判斷發(fā)送任務(wù)池中是否有數(shù)據(jù),如果是,則進入步驟309,如果否,則在經(jīng)過設(shè)置的輪詢周期后進入步驟308。

步驟309,獲取控制任務(wù)數(shù)據(jù)、查詢?nèi)蝿?wù)數(shù)據(jù),通過outputstream發(fā)送給底層通信服務(wù)端。

在一個實施例中,基于任務(wù)發(fā)送優(yōu)先規(guī)則從發(fā)送任務(wù)池中獲取第一數(shù)據(jù),任務(wù)發(fā)送優(yōu)先規(guī)則可以有多種,能夠根據(jù)需求進行設(shè)置。例如,確定發(fā)送任務(wù)池中的第一數(shù)據(jù)的優(yōu)先級,按照優(yōu)先級高低順序獲取第一數(shù)據(jù),將獲取的第一數(shù)據(jù)通過數(shù)據(jù)鏈路發(fā)送給底層通信服務(wù)端,并將此第一數(shù)據(jù)從發(fā)送任務(wù)池中移除。如果第一數(shù)據(jù)的優(yōu)先級相同,則按照加入發(fā)送任務(wù)池的順序獲取具有相同優(yōu)先級的第一數(shù)據(jù)。

在一個實施例中,在接收到發(fā)送任務(wù)數(shù)據(jù),確定發(fā)送任務(wù)數(shù)據(jù)的優(yōu)先級,將發(fā)送任務(wù)數(shù)據(jù)轉(zhuǎn)換為具有第一數(shù)據(jù)格式的第一數(shù)據(jù),并將第一數(shù)據(jù)加入到發(fā)送任務(wù)池中。第一數(shù)據(jù)包含有發(fā)送任務(wù)數(shù)據(jù)的優(yōu)先級、數(shù)據(jù)轉(zhuǎn)換時間等。第一數(shù)據(jù)格式可以根據(jù)不同的app以及控制器等進行設(shè)置。

發(fā)送任務(wù)數(shù)據(jù)可以為多種,例如有控制幀和查詢幀。將控制幀和查詢幀轉(zhuǎn)換為具有第一數(shù)據(jù)格式的控制任務(wù)數(shù)據(jù)和查詢?nèi)蝿?wù)數(shù)據(jù),控制幀的優(yōu)先級高于查詢幀的優(yōu)先級。

控制幀用于控制某個機組或者設(shè)備的、具有規(guī)定統(tǒng)一的數(shù)據(jù)格式的數(shù)據(jù)幀。控制幀的數(shù)據(jù)包括:數(shù)據(jù)發(fā)送端的id、數(shù)據(jù)接收端的id以及控制參數(shù)和控制值。查詢幀用于查詢某個機組或者設(shè)備參數(shù)的、具有規(guī)定統(tǒng)一的數(shù)據(jù)格式的數(shù)據(jù)幀。查詢幀包括:數(shù)據(jù)發(fā)送端id、數(shù)據(jù)接收端id以及查詢參數(shù)。

將控制幀和查詢幀根據(jù)預(yù)設(shè)的第一數(shù)據(jù)格式進行封裝,轉(zhuǎn)換為控制任務(wù)數(shù)據(jù)和查詢?nèi)蝿?wù)數(shù)據(jù)??刂迫蝿?wù)數(shù)據(jù)包括:控制幀的優(yōu)先級、控制幀的轉(zhuǎn)換時間(時間戳)、被封裝的控制幀數(shù)據(jù)。查詢?nèi)蝿?wù)數(shù)據(jù)包括:查詢幀的優(yōu)先級、查詢幀的轉(zhuǎn)換時間(時間戳)、被封裝的查詢幀數(shù)據(jù)。

在一個實施例中,app的界面顯示根據(jù)機組或者設(shè)備的狀態(tài)實時更新,因此,機組或者設(shè)備的狀態(tài)更新顯示需要不斷的向機組或者設(shè)備發(fā)查詢狀態(tài)請求。當用戶操作app控制機組或者設(shè)備某個參數(shù)時,需要向機組或者設(shè)備發(fā)送控制狀態(tài)請求。app的各個功能模塊組裝各自的數(shù)據(jù),根據(jù)業(yè)務(wù)規(guī)則生成控制幀或查詢幀,可以將控制幀或查詢幀經(jīng)由優(yōu)先級分配中心模塊重新組裝為控制任務(wù)數(shù)據(jù)或查詢?nèi)蝿?wù)數(shù)據(jù)后加入發(fā)送任務(wù)池。

優(yōu)先級分配中心模塊可以為app的一個功能單元,所有的控制幀和查詢幀都先進入優(yōu)先級分配中心模塊分配優(yōu)先級,控制幀的優(yōu)先級高于查詢幀。例如,控制幀的優(yōu)先級為1,查詢幀的優(yōu)先級為2。優(yōu)先級分配完畢后將控制幀或查詢幀重新組裝,轉(zhuǎn)換為具有約定好數(shù)據(jù)格式的控制任務(wù)數(shù)據(jù)和查詢?nèi)蝿?wù)數(shù)據(jù),并將控制任務(wù)數(shù)據(jù)和查詢?nèi)蝿?wù)數(shù)據(jù)加入發(fā)送任務(wù)池。

發(fā)送任務(wù)池為存放控制任務(wù)數(shù)據(jù)和查詢?nèi)蝿?wù)數(shù)據(jù)的任務(wù)隊列。當發(fā)送線程獲取發(fā)送任務(wù)池中的數(shù)據(jù)時,優(yōu)先獲取優(yōu)先級高的控制任務(wù)數(shù)據(jù),如果無控制任務(wù)數(shù)據(jù)則遵循fifo(先入先出)原則獲取數(shù)據(jù)。

獲取控制任務(wù)數(shù)據(jù)和查詢?nèi)蝿?wù)數(shù)據(jù)中的數(shù)據(jù)轉(zhuǎn)換時間,根據(jù)數(shù)據(jù)轉(zhuǎn)換時間的順序獲取控制任務(wù)數(shù)據(jù)和查詢?nèi)蝿?wù)數(shù)據(jù)。當確定需要獲取的數(shù)據(jù)是查詢?nèi)蝿?wù)數(shù)據(jù)時,判斷在發(fā)送任務(wù)池中是否存在與此查詢?nèi)蝿?wù)數(shù)據(jù)的數(shù)據(jù)轉(zhuǎn)換時間的時間差值小于時間閾值的控制任務(wù)數(shù)據(jù)。如果存在,則獲取此控制任務(wù)數(shù)據(jù),并通過數(shù)據(jù)鏈路發(fā)送給底層通信服務(wù)端,如果不存在,則獲取此查詢?nèi)蝿?wù)數(shù)據(jù),并通過數(shù)據(jù)鏈路發(fā)送給底層通信服務(wù)端。

例如,發(fā)送線程基于5秒輪詢間隔周期輪詢發(fā)送任務(wù)池。當判斷發(fā)送任務(wù)池不為空時,發(fā)送線程按照時間順序獲取發(fā)送任務(wù)池中的數(shù)據(jù)。當獲取的為查詢?nèi)蝿?wù)數(shù)據(jù)時,需要判斷是否存在與此查詢?nèi)蝿?wù)數(shù)據(jù)的數(shù)據(jù)轉(zhuǎn)換時間的時間差值小于時間閾值的控制任務(wù)數(shù)據(jù)。

例如,時間閾值為1秒,當獲取的為查詢?nèi)蝿?wù)數(shù)據(jù)時,此查詢?nèi)蝿?wù)數(shù)據(jù)的數(shù)據(jù)轉(zhuǎn)換時間為19點20分15秒25。發(fā)送線程遍歷發(fā)送任務(wù)池,判斷是否存在與此查詢?nèi)蝿?wù)數(shù)據(jù)的數(shù)據(jù)轉(zhuǎn)換時間的時間差值小于1秒的控制任務(wù)數(shù)據(jù)。確定發(fā)送任務(wù)池中的一個控制任務(wù)數(shù)據(jù)的數(shù)據(jù)轉(zhuǎn)換時間為19點20分16秒,則19點20分16秒與19點20分15秒5的時間差值小于1秒,則先獲取此控制任務(wù)數(shù)據(jù)。

如果不存在與此查詢?nèi)蝿?wù)數(shù)據(jù)的數(shù)據(jù)轉(zhuǎn)換時間的時間差值小于1秒的控制任務(wù)數(shù)據(jù),則直接獲取并發(fā)送此查詢?nèi)蝿?wù)數(shù)據(jù)??梢栽诓樵?nèi)蝿?wù)數(shù)據(jù)和控制任務(wù)數(shù)據(jù)的頭部或其它位置設(shè)置關(guān)鍵字。例如關(guān)鍵字為status表示查詢?nèi)蝿?wù)數(shù)據(jù),關(guān)鍵字為cmd表示控制任務(wù)數(shù)據(jù)。通過獲取關(guān)鍵字確定是否為查詢?nèi)蝿?wù)數(shù)據(jù)或控制任務(wù)數(shù)據(jù)。

圖4為根據(jù)本發(fā)明的數(shù)據(jù)通信方法的一個實施例中接收數(shù)據(jù)的流程示意圖,如圖4所示:

步驟401,當app啟動時,創(chuàng)建localsocket。

步驟402,獲取輸出流inputstream。

步驟403,創(chuàng)建接收任務(wù)池、接收線程。

步驟404,接收線程對inputstream進行輪詢,判斷是否接收到第二數(shù)據(jù)。

步驟405,獲取第二數(shù)據(jù)并放入接收任務(wù)池中。

步驟406,解析數(shù)據(jù)的頭部標識,確定第二數(shù)據(jù)的數(shù)據(jù)類型。

步驟407,將第二數(shù)據(jù)轉(zhuǎn)換為查詢?nèi)蝿?wù)響應(yīng)數(shù)據(jù)、控制任務(wù)響應(yīng)數(shù)據(jù)。

步驟408,在app界面上顯示查詢?nèi)蝿?wù)響應(yīng)數(shù)據(jù)、控制任務(wù)響應(yīng)數(shù)據(jù)。

在一個實施例中,從接收任務(wù)池中獲取第二數(shù)據(jù),確定第二數(shù)據(jù)的數(shù)據(jù)類型,將第二數(shù)據(jù)轉(zhuǎn)換為具有與數(shù)據(jù)類型對應(yīng)的數(shù)據(jù)格式的接收數(shù)據(jù),并將此第二數(shù)據(jù)從接收任務(wù)池中移除,基于預(yù)設(shè)的處理規(guī)則對接收數(shù)據(jù)進行處理。

數(shù)據(jù)類型包括:查詢響應(yīng)類型、控制響應(yīng)類型等。將第二數(shù)據(jù)轉(zhuǎn)換為具有與查詢響應(yīng)類型對應(yīng)的數(shù)據(jù)格式的查詢?nèi)蝿?wù)響應(yīng)數(shù)據(jù),或者將第二數(shù)據(jù)轉(zhuǎn)換為具有與控制響應(yīng)類型對應(yīng)的數(shù)據(jù)格式的控制任務(wù)響應(yīng)數(shù)據(jù)??梢栽赼pp界面上顯示查詢?nèi)蝿?wù)響應(yīng)數(shù)據(jù)、控制任務(wù)響應(yīng)數(shù)據(jù)。

第二數(shù)據(jù)的頭部或其它的位置中設(shè)置有關(guān)鍵字。解析第二數(shù)據(jù)獲取關(guān)鍵字。當關(guān)鍵字為status時,第二數(shù)據(jù)的數(shù)據(jù)類型為查詢響應(yīng)類型,當關(guān)鍵字為cmd時,第二數(shù)據(jù)的數(shù)據(jù)類型為控制響應(yīng)類型。通過解析第二數(shù)據(jù)并基于關(guān)鍵字確定第二數(shù)據(jù)是否為查詢響應(yīng)類型或控制響應(yīng)類型。將第二數(shù)據(jù)轉(zhuǎn)換為具有與數(shù)據(jù)類型對應(yīng)的數(shù)據(jù)格式的接收數(shù)據(jù)可以有多種方式。

例如,接收線程定時從inputstream接收底層通信服務(wù)端發(fā)送的第二數(shù)據(jù),將第二數(shù)據(jù)放進接收任務(wù)池。在接收任務(wù)池接收到第二數(shù)據(jù)后,將第二數(shù)據(jù)放入結(jié)構(gòu)為哈希表的map<key,value>中,鍵(key)是第二數(shù)據(jù)接收的順序id,值(value)是接收到的第二數(shù)據(jù)。

數(shù)據(jù)解析中心模塊在解析數(shù)據(jù)時從該map中獲取第二數(shù)據(jù)進行解析。數(shù)據(jù)解析中心模塊將接收到的第二數(shù)據(jù)通過獲取第二數(shù)據(jù)中的關(guān)鍵字確定第二數(shù)據(jù)的數(shù)據(jù)類型為查詢響應(yīng)類型或控制響應(yīng)類型。如果是控制響應(yīng)類型,則根據(jù)控制數(shù)據(jù)的協(xié)議將第二數(shù)據(jù)轉(zhuǎn)換為具有與控制響應(yīng)類型對應(yīng)的數(shù)據(jù)格式的控制任務(wù)響應(yīng)數(shù)據(jù)。如果是查詢響應(yīng)類型,則根據(jù)查詢數(shù)據(jù)的協(xié)議將第二數(shù)據(jù)轉(zhuǎn)換為具有與查詢響應(yīng)類型對應(yīng)的數(shù)據(jù)格式的查詢?nèi)蝿?wù)響應(yīng)數(shù)據(jù)。在第二數(shù)據(jù)轉(zhuǎn)換完畢后,將查詢?nèi)蝿?wù)響應(yīng)數(shù)據(jù)、控制任務(wù)響應(yīng)數(shù)據(jù)分發(fā)給app的對應(yīng)功能模塊,用于填充界面展示給用戶。

上述實施例提供的數(shù)據(jù)通信方法,在app運行期間通過數(shù)據(jù)鏈路與底層通信服務(wù)端進行通信,并基于發(fā)送任務(wù)池以及任務(wù)發(fā)送優(yōu)先規(guī)則進行數(shù)據(jù)的發(fā)送,能夠?qū)崿F(xiàn)控制數(shù)據(jù)發(fā)送以及接收的排隊機制,使數(shù)據(jù)可以有序發(fā)送和接收,數(shù)據(jù)鏈路可以實現(xiàn)為單個實例,能夠很好地控制在數(shù)據(jù)通信中的多線程、多鏈路并發(fā),能夠優(yōu)化通信流程,提高app架構(gòu)的移植性并降低對cpu的占用,延長硬件使用壽命,解決多線程和多數(shù)據(jù)鏈路的并發(fā)造成的硬件發(fā)熱等問題。

在一個實施例中,本發(fā)明提供一種數(shù)據(jù)通信裝置51,如圖5所示,包括:鏈路建立模塊51、任務(wù)池建立模塊52、發(fā)送處理模塊53、接收處理模塊54、鏈路關(guān)閉模塊55和數(shù)據(jù)轉(zhuǎn)換模塊56。鏈路建立模塊51在app運行時,建立數(shù)據(jù)鏈路。任務(wù)池建立模塊52創(chuàng)建發(fā)送任務(wù)池和接收任務(wù)池。

發(fā)送處理模塊53基于任務(wù)發(fā)送優(yōu)先規(guī)則從發(fā)送任務(wù)池中獲取第一數(shù)據(jù),并通過數(shù)據(jù)鏈路發(fā)送給底層通信服務(wù)端。接收處理模塊54通過數(shù)據(jù)鏈路接收由底層通信服務(wù)端發(fā)送的第二數(shù)據(jù),將第二數(shù)據(jù)加入接收任務(wù)池中并進行相應(yīng)地處理。鏈路關(guān)閉模塊55當app退出時,則關(guān)閉數(shù)據(jù)鏈路。

在一個實施例中,發(fā)送處理模塊53啟動發(fā)送線程,接收線程輪詢發(fā)送任務(wù)池,當確定發(fā)送任務(wù)池中有第一數(shù)據(jù)時,獲取第一數(shù)據(jù)并通過數(shù)據(jù)鏈路發(fā)送給底層通信服務(wù)端。接收處理模塊54啟動接收線程,接收線程對數(shù)據(jù)鏈路進行輪詢,當確定通過數(shù)據(jù)鏈路接收到底層通信服務(wù)端發(fā)送的第二數(shù)據(jù)時,獲取第二數(shù)據(jù)并加入接收任務(wù)池中。

數(shù)據(jù)轉(zhuǎn)換模塊56接收發(fā)送任務(wù)數(shù)據(jù),確定發(fā)送任務(wù)數(shù)據(jù)的優(yōu)先級。數(shù)據(jù)轉(zhuǎn)換模塊56將發(fā)送任務(wù)數(shù)據(jù)轉(zhuǎn)換為具有第一數(shù)據(jù)格式的第一數(shù)據(jù),并將第一數(shù)據(jù)加入到發(fā)送任務(wù)池中。第一數(shù)據(jù)包含有發(fā)送任務(wù)數(shù)據(jù)的優(yōu)先級、數(shù)據(jù)轉(zhuǎn)換時間。

發(fā)送任務(wù)數(shù)據(jù)包括:控制幀和查詢幀。數(shù)據(jù)轉(zhuǎn)換模塊56將控制幀和查詢幀轉(zhuǎn)換為具有第一數(shù)據(jù)格式的控制任務(wù)數(shù)據(jù)和查詢?nèi)蝿?wù)數(shù)據(jù),控制幀的優(yōu)先級高于查詢幀的優(yōu)先級。

鏈路建立模塊51創(chuàng)建本地套接字localsocket,獲取localsocket的輸入流inputstream和輸出流outputstream。發(fā)送處理模塊53通過outputstream向底層通信服務(wù)端發(fā)送第一數(shù)據(jù)。接收處理模塊54通過inputstream接收底層通信服務(wù)端發(fā)送的第二數(shù)據(jù)。

如圖6所示,發(fā)送處理模塊53包括:優(yōu)先級確定單元531、數(shù)據(jù)獲取單元532、數(shù)據(jù)發(fā)送單元533和數(shù)據(jù)移除單元534。優(yōu)先級確定單元531確定第一數(shù)據(jù)的優(yōu)先級。數(shù)據(jù)獲取單元532按照優(yōu)先級高低順序獲取第一數(shù)據(jù)。數(shù)據(jù)發(fā)送單元533將獲取的第一數(shù)據(jù)通過數(shù)據(jù)鏈路發(fā)送給底層通信服務(wù)端。數(shù)據(jù)移除單元534將此第一數(shù)據(jù)從發(fā)送任務(wù)池中移除。如果第一數(shù)據(jù)的優(yōu)先級相同,則數(shù)據(jù)獲取單元532按照加入發(fā)送任務(wù)池的順序獲取具有相同優(yōu)先級的第一數(shù)據(jù)。

在一個實施例中,數(shù)據(jù)獲取單元532獲取控制任務(wù)數(shù)據(jù)和查詢?nèi)蝿?wù)數(shù)據(jù)中的數(shù)據(jù)轉(zhuǎn)換時間,在發(fā)送任務(wù)池中根據(jù)數(shù)據(jù)轉(zhuǎn)換時間的順序獲取控制任務(wù)數(shù)據(jù)和查詢?nèi)蝿?wù)數(shù)據(jù)。當確定需要獲取的數(shù)據(jù)是查詢?nèi)蝿?wù)數(shù)據(jù)時,數(shù)據(jù)獲取單元532判斷是否存在與此查詢?nèi)蝿?wù)數(shù)據(jù)的數(shù)據(jù)轉(zhuǎn)換時間的時間差值小于時間閾值的控制任務(wù)數(shù)據(jù)。如果存在,則數(shù)據(jù)獲取單元532獲取此控制任務(wù)數(shù)據(jù),如果不存在,則數(shù)據(jù)獲取單元532獲取此查詢?nèi)蝿?wù)數(shù)據(jù)。數(shù)據(jù)發(fā)送單元533將獲取的查詢?nèi)蝿?wù)數(shù)據(jù)和控制任務(wù)數(shù)據(jù)通過數(shù)據(jù)鏈路發(fā)送給底層通信服務(wù)端。

如圖7所示,接收處理模塊54包括:數(shù)據(jù)接收單元541、類型確定單元542、數(shù)據(jù)整合單元543和數(shù)據(jù)處理單元544。數(shù)據(jù)接收單元541從接收任務(wù)池中獲取第二數(shù)據(jù)。類型確定單元542確定第二數(shù)據(jù)的數(shù)據(jù)類型。數(shù)據(jù)整合單元543將第二數(shù)據(jù)轉(zhuǎn)換為具有與數(shù)據(jù)類型對應(yīng)的數(shù)據(jù)格式的接收數(shù)據(jù),并將此第二數(shù)據(jù)從接收任務(wù)池中移除。數(shù)據(jù)處理單元544基于預(yù)設(shè)的處理規(guī)則對接收數(shù)據(jù)進行處理。

數(shù)據(jù)類型包括:查詢響應(yīng)類型、控制響應(yīng)類型。數(shù)據(jù)整合單元543將第二數(shù)據(jù)轉(zhuǎn)換為具有與查詢響應(yīng)類型對應(yīng)的數(shù)據(jù)格式的查詢?nèi)蝿?wù)響應(yīng)數(shù)據(jù),或者將第二數(shù)據(jù)轉(zhuǎn)換為具有與控制響應(yīng)類型對應(yīng)的數(shù)據(jù)格式的控制任務(wù)響應(yīng)數(shù)據(jù)。數(shù)據(jù)處理單元544在app界面上顯示查詢?nèi)蝿?wù)響應(yīng)數(shù)據(jù)、控制任務(wù)響應(yīng)數(shù)據(jù)。

上述實施例提供的數(shù)據(jù)通信方法及裝置,在app運行期間通過數(shù)據(jù)鏈路與底層通信服務(wù)端進行通信,并基于發(fā)送任務(wù)池以及任務(wù)發(fā)送優(yōu)先規(guī)則進行數(shù)據(jù)的發(fā)送,能夠?qū)崿F(xiàn)控制數(shù)據(jù)發(fā)送以及接收的排隊機制,使數(shù)據(jù)可以有序發(fā)送和接收,數(shù)據(jù)鏈路可以實現(xiàn)為單個實例,能夠控制數(shù)據(jù)通信的多線程、多鏈路并發(fā),可以優(yōu)化通信流程,提高app架構(gòu)的移植性并降低對cpu的占用,延長硬件使用壽命,解決多線程和多數(shù)據(jù)鏈路的并發(fā)造成的硬件發(fā)熱等問題,提高工作的安全性以及用戶的體驗度。

可能以許多方式來實現(xiàn)本發(fā)明的方法和系統(tǒng)。例如,可通過軟件、硬件、固件或者軟件、硬件、固件的任何組合來實現(xiàn)本發(fā)明的方法和系統(tǒng)。用于方法的步驟的上述順序僅是為了進行說明,本發(fā)明的方法的步驟不限于以上具體描述的順序,除非以其它方式特別說明。此外,在一些實施例中,還可將本發(fā)明實施為記錄在記錄介質(zhì)中的程序,這些程序包括用于實現(xiàn)根據(jù)本發(fā)明的方法的機器可讀指令。因而,本發(fā)明還覆蓋存儲用于執(zhí)行根據(jù)本發(fā)明的方法的程序的記錄介質(zhì)。

本發(fā)明的描述是為了示例和描述起見而給出的,而并不是無遺漏的或者將本發(fā)明限于所公開的形式。很多修改和變化對于本領(lǐng)域的普通技術(shù)人員而言是顯然的。選擇和描述實施例是為了更好說明本發(fā)明的原理和實際應(yīng)用,并且使本領(lǐng)域的普通技術(shù)人員能夠理解本發(fā)明從而設(shè)計適于特定用途的帶有各種修改的各種實施例。

當前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
开平市| 炎陵县| 平顶山市| 德保县| 靖宇县| 西昌市| 克东县| 班戈县| 吉水县| 吐鲁番市| 湘乡市| 峨边| 通榆县| 兴化市| 高州市| 齐齐哈尔市| 牡丹江市| 通江县| 福清市| 广宗县| 凌源市| 石渠县| 罗田县| 江阴市| 商都县| 朝阳县| 贵溪市| 湘西| 汕尾市| 察哈| 萝北县| 舞阳县| 张掖市| 沧州市| 靖宇县| 收藏| 美姑县| 鄂托克旗| 阿巴嘎旗| 琼结县| 新密市|