• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    DDS分布式系統(tǒng)快速開發(fā)

    2022-12-30 07:51:36唐江文
    計算機工程與設(shè)計 2022年12期
    關(guān)鍵詞:代碼生成開發(fā)者代碼

    唐江文

    (中國電子科技集團公司 電子科學(xué)研究院,北京 100041)

    0 引 言

    數(shù)據(jù)分發(fā)服務(wù)(data-distribution service,DDS)是一種發(fā)布訂閱式的通信中間件,它由OMG組織于2004年發(fā)布為國際開放標準,并不斷擴充發(fā)展至今。DDS引入了虛擬全局數(shù)據(jù)空間的概念,在全局數(shù)據(jù)空間中,應(yīng)用可以通過讀寫帶有主題的數(shù)據(jù)對象的方式進行通信。同時,DDS提供了QoS參數(shù)配置功能,可以實現(xiàn)對可靠性、帶寬、通信截止時間以及資源上限的靈活控制。DDS可以實現(xiàn)分布式通信實體間的解耦,發(fā)布者和訂閱者可以動態(tài)加入和退出,使系統(tǒng)具有高擴展性;另外,DDS采用組播自動發(fā)現(xiàn)的機制,DDS應(yīng)用可以靈活部署在網(wǎng)絡(luò)中的任一計算機設(shè)備上。

    目前,DDS廣泛應(yīng)用于各種需要實時數(shù)據(jù)交換的場景和領(lǐng)域。文獻[1]在EXata仿真器構(gòu)建的子系統(tǒng)間,使用DDS實現(xiàn)數(shù)據(jù)交互和時間同步,提高了大規(guī)模電力通信網(wǎng)的仿真效率;文獻[2]基于DDS實現(xiàn)了組織靈活、支持實時狀態(tài)監(jiān)控與用戶管理的語音通信系統(tǒng);文獻[3]基于DDS實現(xiàn)了一種分布式的熱處理集散控制監(jiān)控系統(tǒng),用于航天火箭發(fā)動機制造領(lǐng)域;文獻[4]中的ROS2,是基于DDS開發(fā)的多Agent機器人系統(tǒng)開發(fā)框架,廣泛應(yīng)用于機器人研究和仿真;文獻[5]基于DDS實現(xiàn)了航天器軟件通信框架,可以實現(xiàn)靈活便捷的通信過程。

    通過前面各領(lǐng)域的工程實踐,已經(jīng)充分證明了DDS作為分布式系統(tǒng)的通信中間件,具有的高擴展性和高靈活性。但在開發(fā)基于DDS的大規(guī)模分布式系統(tǒng)時暴露了一項不足之處:缺乏分布式系統(tǒng)建模的能力。這是因為用于DDS開發(fā)的IDL語言,只描述接口的數(shù)據(jù)類型,而沒有描述主題、消息域,更沒有描述應(yīng)用。這些信息的缺失造成DDS無法像常見的建模語言(例如UML和SysML)那樣方便地進行代碼自動生成[6,7],進而限制了DDS應(yīng)用的開發(fā)效率,不得不使用文檔以文字的形式來描述系統(tǒng)模型,并且編寫大量重復(fù)冗余的代碼,易錯難查。

    本文擴展了IDL語法,添加了topic和domain關(guān)鍵字,從而可以從IDL文件中同時解析出來接口數(shù)據(jù)類型信息和主題、消息域信息;另外又為應(yīng)用設(shè)計了應(yīng)用描述XML文件,用于獲取應(yīng)用對主題的發(fā)布訂閱相關(guān)信息。實現(xiàn)了編譯器dseappgen,直接為應(yīng)用生成面向主題發(fā)布訂閱的C++代碼文件,并自動編譯成動態(tài)庫,去除了重復(fù)冗余代碼,大大簡化了開發(fā)者的開發(fā)工作,并降低了出錯風(fēng)險。另外,本文還在自動生成的代碼中植入了一些增強功能,比如植入了Lua語言解釋器[8,9],讓開發(fā)者可以進行快速仿真;又如Json字符串與DDS消息之間的相互轉(zhuǎn)換,增強了DDS原有的序列化能力;并且植入了輕量級的Http Server,支持用戶為應(yīng)用進行B/S架構(gòu)開發(fā)。

    1 DDS通信原理簡介

    DDS是通過自動發(fā)現(xiàn)協(xié)議實現(xiàn)與網(wǎng)絡(luò)IP的解耦[10]。只要應(yīng)用位于同一個支持組播的二層網(wǎng)絡(luò)中,就可以自動匹配具有相同主題的發(fā)布者和訂閱者,所以應(yīng)用可以部署運行在網(wǎng)絡(luò)中的任何一臺計算機設(shè)備上,這讓開發(fā)者無需關(guān)注網(wǎng)絡(luò)具體的組網(wǎng)結(jié)構(gòu)。

    DDS的發(fā)布者和訂閱者的自動匹配能力,源自于DDS的自動發(fā)現(xiàn)協(xié)議,協(xié)議涉及的主要概念和基本過程如圖1所示。DDS中的通信實體稱作“參與者(Participant)”,參與者記錄了當前計算機設(shè)備所有的IP地址和端口,以及共享內(nèi)存的“端口”。當應(yīng)用中實例化一個參與者時,它會執(zhí)行參與者發(fā)現(xiàn)協(xié)議(PDP),用PDP寫者(PDPWriter)通過組播的方式將自己的IP地址以及EDP的發(fā)布(Pub)/訂閱(Sub)的讀者(Reader)/寫者(Writer)等信息發(fā)送給其它參與者,其它參與者會記錄下這位新參與者的信息,并把自己的相應(yīng)信息發(fā)送回來,從而保證每個參與者都能感知到網(wǎng)絡(luò)中其它參與者的存在,并且知曉與其它參與者的通信方法。

    圖1 DDS通信原理:自動發(fā)現(xiàn)協(xié)議支撐發(fā)布訂閱通信方式

    當用戶使用DDS進行業(yè)務(wù)數(shù)據(jù)通信時,首先會定義某個主題的發(fā)布者(Publisher)/訂閱者(Subscriber),然后關(guān)聯(lián)到用戶寫者(UserWriter)/用戶讀者(UserReader)。此時,參與者會執(zhí)行終端發(fā)現(xiàn)協(xié)議(EDP),將用戶寫者/用戶讀者的相關(guān)信息,比如主題、消息類型等,發(fā)送給網(wǎng)絡(luò)中需要這些信息的其它參與者,進行用戶讀/寫者的匹配,這樣發(fā)布者就知道了其發(fā)布的消息應(yīng)該發(fā)送給哪些訂閱者,從而實現(xiàn)了發(fā)布訂閱的通信方式。

    圖2簡單展示了DDS底層數(shù)據(jù)緩存及收發(fā)模型,DDS在發(fā)送消息時,從更改池(CacheChange Pool)中取出一個更改(CacheChange,“更改”可以簡單理解為一個消息),從負載池(Payload Pool)中取出一個負載(Payload),將需要發(fā)送的數(shù)據(jù)序列化后填入負載,然后掛載到更改中。隨后,更改會被添加到寫者歷史(Writer History,可以理解為一個消息隊列)里,發(fā)送線程會將寫者歷史中的更改通過指定的傳輸方式(UDP、TCP、共享內(nèi)存)發(fā)送到相應(yīng)接收方。發(fā)送結(jié)束后,該更改會從寫者歷史中移除,其負載會在釋放數(shù)據(jù)后重新放到負載池中,而該更改也會被回收到更改池中。接收消息的一方,其內(nèi)存也會進行類似的鏈式循環(huán)操作??梢?,DDS充分利用了內(nèi)存池技術(shù),最大程度地提高了內(nèi)存效率。

    圖2 DDS底層數(shù)據(jù)緩存及收發(fā)模型

    2 DDS分布式系統(tǒng)開發(fā)流程的改進

    傳統(tǒng)DDS分布式系統(tǒng)的開發(fā)流程如圖3所示,設(shè)計人員一側(cè),首先撰寫系統(tǒng)軟件設(shè)計文檔,然后手動編寫IDL文件,由ddsgen生成各接口正反序列化代碼。開發(fā)人員一側(cè),手動編寫主題、消息域、主題與接口相關(guān)、主題與發(fā)布訂閱相關(guān)以及大量業(yè)務(wù)代碼,最后和ddsgen自動生成的代碼完成編譯鏈接生成DDS應(yīng)用。

    圖3 傳統(tǒng)DDS分布式系統(tǒng)的開發(fā)流程

    其中存在的問題是,設(shè)計文檔是一種供人閱讀的、格式相對自由的文本,無法為開發(fā)提供強制約束。設(shè)計人員根據(jù)設(shè)計文檔編寫IDL文件,容易出現(xiàn)謄抄錯誤,后期一旦文檔發(fā)生更改需要手動進行同步,費時費力。而且,主題、消息域、主題與接口的關(guān)聯(lián)、主題與發(fā)布訂閱的關(guān)聯(lián)是設(shè)計內(nèi)容,卻侵入到了開發(fā)人員的代碼中,設(shè)計和開發(fā)出現(xiàn)交叉,導(dǎo)致設(shè)計和開發(fā)邊界不清,既加大了開發(fā)者工作量,也讓代碼容易出錯。事實上,設(shè)計一旦固定下來,業(yè)務(wù)之外的其它代碼基本是固定不變的,完全可以自動生成,避免不必要的出錯風(fēng)險。

    改進后的DDS應(yīng)用開發(fā)流程如圖4所示,由格式化、結(jié)構(gòu)化較強的類代碼文件(IDL文件、應(yīng)用描述XML文件)替代系統(tǒng)軟件設(shè)計文檔作為原始設(shè)計輸入,后期系統(tǒng)軟件設(shè)計文檔可以由這些文件自動生成,這就解決了文檔和工程實現(xiàn)之間難以同步的問題,而且這些類代碼文件還可以通過一些版本管理工具(如Git)進行歷史版本管理。之前業(yè)務(wù)代碼之外需要手動編寫的代碼也可以通過語法解析和模板生成的方式,進行自動生成。這樣一來,設(shè)計和開發(fā)實現(xiàn)完全解耦,業(yè)務(wù)開發(fā)人員只需要關(guān)心業(yè)務(wù)內(nèi)容,編寫業(yè)務(wù)代碼即可,大大減少了開發(fā)人員的工作量,同時也避免了出錯風(fēng)險。最后將這些代碼自動編譯鏈接,生成DDS應(yīng)用。

    圖4 DDS分布式系統(tǒng)的快速開發(fā)流程

    自動生成代碼的另一個優(yōu)勢是,還可以根據(jù)解析出來的接口、主題、消息域等元信息,自動生成各種增強性功能代碼,這里主要添加了Lua解釋器、Json與接口消息的轉(zhuǎn)換、Http Server、消息記錄、消息統(tǒng)計等功能,進一步增強DDS應(yīng)用的基礎(chǔ)能力。

    3 改進的IDL編譯器dseappgen關(guān)鍵技術(shù)

    前面介紹了DDS分布式系統(tǒng)開發(fā)流程的改進,而支撐改進的核心是dseappgen這個改進的IDL編譯器的實現(xiàn)。本部分主要介紹dseappgen的關(guān)鍵技術(shù)途徑,分為5個方面:①新的設(shè)計輸入;②語法解析;③代碼生成;④Lua解釋器;⑤其它增強功能。

    3.1 新的設(shè)計輸入

    前面提到,在新的開發(fā)流程中使用格式化、結(jié)構(gòu)化較強的類代碼文件(IDL文件、應(yīng)用描述XML文件)替代系統(tǒng)軟件設(shè)計文檔作為原始設(shè)計輸入。

    在包含傳統(tǒng)的IDL文件內(nèi)容,諸如模塊(module)、結(jié)構(gòu)體(struct)、枚舉類型(enum)等等之外,dseappgen又添加了兩個新的語法關(guān)鍵字——主題(topic)和消息域(domain),具體語法可以見表1。這兩個關(guān)鍵字描述了系統(tǒng)中有哪些主題和消息域,以及主題與哪個結(jié)構(gòu)體進行關(guān)聯(lián)。從而把主題和消息域的定義,從代碼轉(zhuǎn)移到了IDL文件。IDL文件還加入了@description的注解語法,可以為各種語法元素添加注解,這些注解經(jīng)過dseappgen處理后,可以生成為代碼注釋,以及軟件設(shè)計文檔,方便閱讀。

    表1 topic和domain關(guān)鍵字的基本語法

    應(yīng)用描述XML文件,該文件指明了引用哪個IDL文件,并且描述了該應(yīng)用具體用到了哪些主題,這些主題在哪些消息域中進行發(fā)布或是訂閱。dseappgen在獲取這些信息后,一方面可以從IDL中裁減出該應(yīng)用引用到的主題、消息域和接口,屏蔽掉未引用到的,從而加快代碼生成和編譯鏈接效率;另一方面,可以避免未引用主題和接口的干擾,防止應(yīng)用開發(fā)者錯誤使用非設(shè)計的主題和接口。應(yīng)用描述XML文件的基本格式見表2。其中,本文將主題的發(fā)布訂閱方式具體劃分為4種,即INPUT(只訂閱該主題),OUTPUT(只發(fā)布該主題),LOOPBACK(在同一消息域中既發(fā)布也訂閱該主題),CONVERT(在一個消息域中訂閱該主題,在另一消息域中發(fā)布該主題),方便設(shè)計者靈活運用。

    表2 應(yīng)用描述XML文件的基本格式

    這兩類設(shè)計輸入文件,IDL文件是面向系統(tǒng)全局,其內(nèi)容由系統(tǒng)內(nèi)所有應(yīng)用共享,而應(yīng)用描述XML文件是面向具體應(yīng)用,每個應(yīng)用有一份自己的應(yīng)用描述XML文件,這兩種文件實現(xiàn)了對DDS分布式系統(tǒng)的建模。

    3.2 語法解析

    語法解析是實現(xiàn)代碼自動生成的前提,是實現(xiàn)用IDL和應(yīng)用描述XML文件替代設(shè)計文檔的關(guān)鍵技術(shù)。需要用語法解析技術(shù)解析出的元信息包括模塊(module)、結(jié)構(gòu)體(struct)、結(jié)構(gòu)體元素(struct element)、枚舉(enum)、枚舉元素(enum element)、內(nèi)置類型(如short、long等)、主題(topic)、消息域(domain)、應(yīng)用名等,并且要解析出這些元信息之間的關(guān)聯(lián)關(guān)系。

    其中,應(yīng)用、應(yīng)用和主題之間的關(guān)聯(lián)關(guān)系可以使用XML解析工具進行解析。而描述其它元信息及關(guān)聯(lián)關(guān)系的IDL文件,使用的是經(jīng)過關(guān)鍵字擴展后的IDL語法,這里采用ANTLR4進行語法分析,該工具在語法分析領(lǐng)域應(yīng)用廣泛[11,12]。核心的語法結(jié)構(gòu)使用廣泛應(yīng)用的巴科斯范式(Backus-Naur form[13],BNF)表示見表3。

    表3 語法結(jié)構(gòu)核心部分的巴科斯范式

    ANTLR4可以對語法元素進行分析和提取,但語法樹的數(shù)據(jù)結(jié)構(gòu)需要自行設(shè)計。dseappgen的語法樹主要包括語法元素哈希表,以及表征語法元素關(guān)聯(lián)關(guān)系的樹形鏈表。語法樹構(gòu)建成功之后,就可以支撐后續(xù)步驟——代碼生成——進行語法元素查找和遍歷。

    3.3 代碼生成

    在獲取了各種必要的語法元信息之后,就需要對具體的DDS應(yīng)用進行代碼生成。代碼生成從技術(shù)上來說,是通過一種模板引擎,將代碼模板中待替換的內(nèi)容,替換為相應(yīng)的信息,在本文所研究的場景中,即替換為各種由語法解析分析出來的語法元信息。這里選用的模板引擎是StringTemplate,該引擎靈活高效,簡單易用,而且能夠滿足代碼遞歸生成的需求,該引擎經(jīng)常和ANTLR4配合使用。

    在選定代碼生成引擎之后,需要對代碼模板的結(jié)構(gòu)進行設(shè)計。需要考慮的問題有目標生成的代碼結(jié)構(gòu),以及暴露給用戶的C++API。圖5展示了代碼模板的基本結(jié)構(gòu)。在代碼模板中,自動生成了與應(yīng)用描述XML文件內(nèi)容相對應(yīng)的參與者、主題、發(fā)布者、訂閱者等各種DDS的通信概念實體,從而免去了開發(fā)者手動編寫的工作量,而且讓開發(fā)者完全不需要了解這些具體概念。并且這些API將主題名具化到函數(shù)名里(圖5中“xxx”表示的是某個主題的名字),從而可以讓C++編譯器協(xié)助檢查,尤其是在使用IDE開發(fā)過程中,會有函數(shù)名自動提示,大大降低了開發(fā)者出錯風(fēng)險。與該應(yīng)用無關(guān)的主題不會出現(xiàn)在生成的API中,也防止了開發(fā)者錯誤發(fā)布或訂閱與其無關(guān)的主題。

    圖5 代碼模板的基本結(jié)構(gòu)

    對于消息結(jié)構(gòu)體的正反序列化代碼,依然調(diào)用DDS自帶的生成工具(ddsgen)進行生成。不過由于每個應(yīng)用只引用了IDL文件中的部分結(jié)構(gòu)體,所以為了避免生成冗余的正反序列化代碼,這里通過對語法樹中語法元素的依賴關(guān)系進行分析,只提取引用到的必要的語法信息,生成新的精簡過的IDL文件,然后再交給ddsgen處理。其中,語法元素的依賴關(guān)系分析用到了DAG(有向無環(huán)圖)的拓撲排序算法[14]。

    代碼生成還包括各種增強功能,以及CMake編譯文件和配置文件的生成等等。

    3.4 Lua解釋器

    Lua是一種可以動態(tài)解釋執(zhí)行的腳本語言,它具有輕量、方便嵌入集成、執(zhí)行速度快等優(yōu)點,在許多大型軟件中作為嵌入式腳本語言存在。這里,引入Lua腳本語言,進一步提高DDS分布式系統(tǒng)的開發(fā)效率,并賦予DDS應(yīng)用隨時編寫隨時運行的動態(tài)執(zhí)行能力,方便分布式系統(tǒng)的功能調(diào)試和仿真,尤其適用于功能原型的快速搭建,以及消息激勵器、算法仿真器等模擬器的開發(fā)。

    Lua腳本由Lua解釋器加載執(zhí)行,本文將Lua解釋器內(nèi)嵌到DDS應(yīng)用中,并將DDS消息發(fā)布訂閱相關(guān)API以Lua語言的形式暴露給用戶。這里需要解決的主要問題是Lua對DDS C++接口的封裝,Lua數(shù)據(jù)結(jié)構(gòu)與DDS消息結(jié)構(gòu)體的轉(zhuǎn)換,暴露給用戶的Lua API的設(shè)計。圖5也展示了DDS應(yīng)用中Lua相關(guān)部分的代碼模板結(jié)構(gòu)。代碼模板將發(fā)布者和訂閱者封裝成Lua對象,并通過Lua Table和C++結(jié)構(gòu)的轉(zhuǎn)換實現(xiàn)消息在Lua API和DDS C++API之間的傳遞,用戶只需要獲取Lua封裝的相應(yīng)主題的發(fā)布者和訂閱者對象,即可實現(xiàn)消息的發(fā)布訂閱操作。

    3.5 其它增強功能

    考慮到DDS應(yīng)用開發(fā)者在日常開發(fā)過程中的一些常用需求,又在生成的代碼中加入了一些增強功能。

    3.5.1 Json字符串與DDS消息的轉(zhuǎn)換

    開發(fā)者經(jīng)常需要通過打印消息內(nèi)容進行功能調(diào)試,然而實際系統(tǒng)中用到的DDS消息往往字段較多,逐字段打印會加大開發(fā)者工作量。前面通過語法解析,已經(jīng)獲取了DDS消息每個字段的名稱和類型,因此可以通過代碼生成的方法自動生成DDS消息與Json字符串之間的互相轉(zhuǎn)換代碼(這里用到了C++Json庫nlohmann)。這樣,需要打印消息內(nèi)容時就可以將DDS消息以格式化良好的Json字符串形式打印,大大減輕了開發(fā)者的工作負擔(dān)。另外,開發(fā)者也可以在代碼中使用Json字符串作為DDS消息的字面值,然后轉(zhuǎn)換為DDS消息結(jié)構(gòu)體,進而進行消息發(fā)布,這樣具有更好的可讀性。

    3.5.2 Http Server的嵌入

    DDS應(yīng)用多是運行在服務(wù)器的后臺程序,若想與DDS應(yīng)用在運行時進行交互,會比較困難,因此在DDS應(yīng)用中嵌入了輕量級的Http Server——Boost Beast[15],它允許用戶通過瀏覽器加載Web頁面,執(zhí)行Javascript代碼,可以進行HTTP請求應(yīng)答通信,支持WebSocket,當用戶有運行時交互或者圖形化交互需求時,可以開啟該輕量級Http Server。

    3.5.3 消息記錄和統(tǒng)計

    DDS分布式系統(tǒng)中往往記錄DDS消息,以方便對系統(tǒng)進行數(shù)據(jù)分析或故障排查。由于在代碼生成中已經(jīng)掌控了DDS消息的發(fā)布和訂閱,因此在發(fā)布和訂閱過程中加入對消息的記錄和統(tǒng)計。消息記錄的內(nèi)容包括消息Json字符串、應(yīng)用名稱、發(fā)布訂閱時間等,使用Elasticsearch作為記錄存儲數(shù)據(jù)庫,以支持快速高效的記錄查詢。消息統(tǒng)計主要統(tǒng)計的是消息的發(fā)布訂閱次數(shù)、頻率,通過Http Server開放了相應(yīng)Restful Api,支持當前流行的數(shù)據(jù)采集平臺Prometheus進行訪問采集。

    圖6給出了dseappgen編譯生成的可執(zhí)行文件內(nèi)部各功能的組成、協(xié)作以及與外部的交互。

    圖6 編譯生成的可執(zhí)行文件內(nèi)部功能結(jié)構(gòu)

    4 簡單實例

    這里以一個簡單的發(fā)布訂閱實例說明使用dseappgen編譯器后給DDS分布式系統(tǒng)開發(fā)帶來的便利。

    為了實現(xiàn)如圖7所示的發(fā)布訂閱通信功能,表4是該DDS分布式系統(tǒng)的IDL文件,表5是應(yīng)用pubtest的應(yīng)用描述XML文件,表6是應(yīng)用subtest的應(yīng)用描述XML文件,這3個文件由設(shè)計者編寫。

    圖7 一個簡單的發(fā)布訂閱通信實例

    表4 示例IDL文件test.idl

    表5 示例應(yīng)用pubtest的應(yīng)用描述XML文件pubtest.xml

    表6 示例應(yīng)用subtest的應(yīng)用描述XML文件subtest.xml

    然后設(shè)計者使用表7中命令調(diào)用dseappgen生成兩個可執(zhí)行程序pubtest和subtest(dseappgen也可以生成供C++開發(fā)者使用的動態(tài)庫,這里以生成Lua解釋器為例)。

    表7 使用dseappgen編譯生成可執(zhí)行程序

    接下來,開發(fā)者可以為pubtest和subtest撰寫Lua腳本實現(xiàn)消息的發(fā)布訂閱。發(fā)布Lua腳本見表8,訂閱Lua腳本見表9。

    表8 示例應(yīng)用pubtest的腳本pubtest.lua

    表9 示例應(yīng)用subtest的腳本subtest.lua

    分別啟動pubtest和subtest,將會看到subtest打印出pubtest發(fā)布的消息。從該示例可以直觀看出,設(shè)計者和開發(fā)者的工作是解耦的。設(shè)計者使用IDL和應(yīng)用描述XML文件就完成了整個分布式系統(tǒng)的應(yīng)用組成和消息互聯(lián)的設(shè)計,也就是完成了系統(tǒng)建模。通過dseappgen自動生成可執(zhí)行文件后,即可將工作轉(zhuǎn)移到開發(fā)者進行業(yè)務(wù)開發(fā)。dseappgen的代碼生成隱藏了DDS諸多概念,使得發(fā)布訂閱API變得非常簡單,即使并不了解DDS的各種概念,也可以簡單幾行代碼輕松實現(xiàn)發(fā)布訂閱通信。

    5 優(yōu)勢分析

    本文在實現(xiàn)改進的IDL編譯器dseappgen的基礎(chǔ)上,提出了新的DDS分布式系統(tǒng)快速開發(fā)流程,主要的優(yōu)勢有以下幾點:

    (1)賦予IDL語言進行分布式系統(tǒng)建模的能力,貫徹了基于模型的系統(tǒng)工程化(MBSE)思想,IDL文件和應(yīng)用描述XML文件完全建模了整個分布式系統(tǒng)的框架和通信結(jié)構(gòu),方便項目管理者從全局掌握項目拓撲情況。

    (2)傳統(tǒng)DDS分布式系統(tǒng)開發(fā)方式,主題和消息域的定義是侵入到代碼中的,無法實現(xiàn)設(shè)計和開發(fā)的解耦,而新的開發(fā)流程中,主題和消息域定義在IDL文件中,應(yīng)用的主題和消息域使用情況定義在應(yīng)用描述XML文件中,從而使得設(shè)計者和開發(fā)者完全解耦。

    (3)dseappgen生成的動態(tài)庫或Lua解釋器,只包含應(yīng)用描述XML文件中涉及到的主題的API,避免了開發(fā)者發(fā)布訂閱無關(guān)主題,方便項目管理者對主題訪問權(quán)限進行管理;而且API是具化到函數(shù)名中的,C++編譯器和Lua解釋器會協(xié)助檢查,防止開發(fā)者錯誤使用。

    (4)自動生成的動態(tài)庫和Lua解釋器,隱藏了DDS內(nèi)部復(fù)雜概念,使得發(fā)布訂閱API更加簡化,一行代碼實現(xiàn)通信,大大減少了開發(fā)者的代碼量,尤其是在動輒幾百個主題的大型項目中,大大提高了開發(fā)效率,降低了項目風(fēng)險。

    (5)Lua語言的嵌入,以及各種增強功能的加入,讓DDS應(yīng)用更適合快速開發(fā)、快速測試、快速仿真。

    (6)與當前熱門的機器人操作系統(tǒng)ROS2[16]相比,ROS2同樣使用DDS進行各應(yīng)用節(jié)點之間的通信,并且定義了參數(shù)、服務(wù)等概念,并提供了基于Python的腳本開發(fā)方式,加上開源社區(qū)為ROS2提供了豐富的自動化控制領(lǐng)域的第三方庫,是目前自動化領(lǐng)域設(shè)計仿真的首選框架。而本文更關(guān)注的是,為大型DDS分布式系統(tǒng)開發(fā),提供一種開發(fā)模式,讓設(shè)計者和開發(fā)者為完成項目更好更高效地進行合作,而ROS2并沒有在這方面提供相應(yīng)的解決方案,而且本文也提供了基于Lua的腳本開發(fā)方式。

    6 結(jié)束語

    本文結(jié)合當前DDS分布式系統(tǒng)工程開發(fā)現(xiàn)狀,對工程開發(fā)實踐中遇到的問題進行了分析,設(shè)計實現(xiàn)了改進的IDL編譯器dseappgen,并基于此工具提出DDS分布式系統(tǒng)開發(fā)流程,其中涉及到的技術(shù)手段包括語法解析、代碼生成、Lua解釋器等等。新方法貫徹了MBSE的思想,將工程實踐中設(shè)計和開發(fā)進行解耦合,一方面讓設(shè)計獨立于開發(fā),不需要將設(shè)計侵入代碼,另一方面也節(jié)省了開發(fā)者的很多工作量,尤其是Lua解釋器的引入,讓DDS應(yīng)用擁有了隨時修改隨時運行的能力,非常適用于算法驗證、消息激勵等模擬器的開發(fā)。

    目前dseappgen及其帶來的新開發(fā)模式在很多項目中開始了實踐和應(yīng)用,很大程度加快了項目的設(shè)計、開發(fā)、測試進度。

    為了繼續(xù)推進DDS分布式系統(tǒng)開發(fā)的工程化,未來還將基于本文提出的開發(fā)流程,構(gòu)建具有圖形界面的“低代碼[17]”開發(fā)平臺,可以用于工程的系統(tǒng)原型快速搭建,提升工程開發(fā)的自動化,降低工程開發(fā)的復(fù)雜性。

    猜你喜歡
    代碼生成開發(fā)者代碼
    Lustre語言可信代碼生成器研究進展
    創(chuàng)世代碼
    動漫星空(2018年11期)2018-10-26 02:24:02
    創(chuàng)世代碼
    動漫星空(2018年2期)2018-10-26 02:11:00
    創(chuàng)世代碼
    動漫星空(2018年9期)2018-10-26 01:16:48
    創(chuàng)世代碼
    動漫星空(2018年5期)2018-10-26 01:15:02
    代碼生成技術(shù)在軟件開發(fā)中的應(yīng)用
    電子世界(2016年15期)2016-08-29 02:14:28
    16%游戲開發(fā)者看好VR
    CHIP新電腦(2016年3期)2016-03-10 13:06:42
    基于XML的代碼自動生成工具
    電子科技(2015年2期)2015-12-20 01:09:20
    iOS開發(fā)者調(diào)查
    電腦迷(2015年8期)2015-05-30 12:27:10
    iOS開發(fā)者調(diào)查
    電腦迷(2015年4期)2015-05-30 05:24:09
    女人高潮潮喷娇喘18禁视频| 国产三级黄色录像| 最近最新免费中文字幕在线| 成熟少妇高潮喷水视频| 欧美精品啪啪一区二区三区| 国产爱豆传媒在线观看 | 三级毛片av免费| 午夜福利成人在线免费观看| 免费在线观看亚洲国产| 亚洲国产高清在线一区二区三| 一本大道久久a久久精品| 亚洲欧美精品综合一区二区三区| 黄色 视频免费看| 中文字幕人成人乱码亚洲影| 精品国产美女av久久久久小说| 两个人的视频大全免费| 日韩欧美 国产精品| 日本 av在线| 男女之事视频高清在线观看| 色综合欧美亚洲国产小说| 在线观看舔阴道视频| 嫩草影视91久久| 哪里可以看免费的av片| 国产成人aa在线观看| 制服人妻中文乱码| 精品一区二区三区视频在线观看免费| 亚洲,欧美精品.| 色播亚洲综合网| 久久久久国产一级毛片高清牌| 亚洲国产欧美网| 精品电影一区二区在线| 亚洲狠狠婷婷综合久久图片| 首页视频小说图片口味搜索| 亚洲专区字幕在线| 无遮挡黄片免费观看| 久久精品综合一区二区三区| e午夜精品久久久久久久| 中文字幕高清在线视频| 最好的美女福利视频网| 国产黄色小视频在线观看| 成年免费大片在线观看| 天天一区二区日本电影三级| 美女免费视频网站| 免费观看人在逋| 国产日本99.免费观看| 中文字幕高清在线视频| 丁香欧美五月| 精品久久久久久久末码| 黑人欧美特级aaaaaa片| 老司机靠b影院| 岛国视频午夜一区免费看| 欧美久久黑人一区二区| 一级黄色大片毛片| 国产成年人精品一区二区| 桃红色精品国产亚洲av| 啦啦啦观看免费观看视频高清| 亚洲中文字幕一区二区三区有码在线看 | 国产亚洲精品av在线| 999久久久国产精品视频| 亚洲熟妇熟女久久| 别揉我奶头~嗯~啊~动态视频| 欧美一级a爱片免费观看看 | 国产成人欧美在线观看| 成年版毛片免费区| 男女做爰动态图高潮gif福利片| 欧美在线一区亚洲| 久久人妻av系列| www日本在线高清视频| 午夜影院日韩av| 91av网站免费观看| 丰满人妻熟妇乱又伦精品不卡| 国产精品一区二区精品视频观看| 他把我摸到了高潮在线观看| 国产熟女午夜一区二区三区| 在线国产一区二区在线| 欧美av亚洲av综合av国产av| 最近最新免费中文字幕在线| 99精品在免费线老司机午夜| 村上凉子中文字幕在线| 日韩av在线大香蕉| 久久人妻av系列| 国产午夜福利久久久久久| 中文字幕人妻丝袜一区二区| 国内精品久久久久久久电影| 欧美日韩国产亚洲二区| 国产一区二区在线观看日韩 | 一区福利在线观看| 色精品久久人妻99蜜桃| 国内精品久久久久精免费| 老熟妇仑乱视频hdxx| 日韩 欧美 亚洲 中文字幕| 国产又色又爽无遮挡免费看| 日本一本二区三区精品| 亚洲 欧美一区二区三区| 午夜日韩欧美国产| 五月伊人婷婷丁香| 禁无遮挡网站| 国产亚洲精品av在线| 成人三级黄色视频| 夜夜爽天天搞| 制服人妻中文乱码| 99国产极品粉嫩在线观看| 视频区欧美日本亚洲| 美女 人体艺术 gogo| 9191精品国产免费久久| 国内揄拍国产精品人妻在线| 欧美乱妇无乱码| 一级毛片女人18水好多| 美女大奶头视频| 亚洲aⅴ乱码一区二区在线播放 | 国产私拍福利视频在线观看| 黄色片一级片一级黄色片| 亚洲国产欧美网| 搡老岳熟女国产| 欧美在线一区亚洲| 亚洲精品av麻豆狂野| 欧美一区二区精品小视频在线| videosex国产| 亚洲avbb在线观看| 久久婷婷成人综合色麻豆| 国产一区二区在线av高清观看| 在线看三级毛片| xxx96com| av免费在线观看网站| 免费在线观看完整版高清| 久9热在线精品视频| 啦啦啦韩国在线观看视频| 久久欧美精品欧美久久欧美| 狠狠狠狠99中文字幕| 亚洲第一电影网av| 91字幕亚洲| 91av网站免费观看| 99热这里只有是精品50| 少妇人妻一区二区三区视频| 制服诱惑二区| 女人爽到高潮嗷嗷叫在线视频| 丁香欧美五月| 国模一区二区三区四区视频 | 三级国产精品欧美在线观看 | 亚洲免费av在线视频| 日韩精品中文字幕看吧| 亚洲中文av在线| 性欧美人与动物交配| 黄色成人免费大全| 露出奶头的视频| 亚洲第一欧美日韩一区二区三区| 人妻夜夜爽99麻豆av| 亚洲av电影在线进入| 99久久综合精品五月天人人| 亚洲成人久久性| 国产精品av久久久久免费| 婷婷丁香在线五月| 一区二区三区高清视频在线| 国产成人精品久久二区二区91| 久久国产精品人妻蜜桃| 国产亚洲精品第一综合不卡| 香蕉国产在线看| 看黄色毛片网站| 巨乳人妻的诱惑在线观看| 一本久久中文字幕| 特级一级黄色大片| 日韩欧美一区二区三区在线观看| 精品无人区乱码1区二区| 亚洲最大成人中文| 欧美黑人欧美精品刺激| 熟女少妇亚洲综合色aaa.| 国产亚洲精品久久久久久毛片| 日韩三级视频一区二区三区| 国产久久久一区二区三区| 国产高清视频在线播放一区| 亚洲国产欧美一区二区综合| 久久久久免费精品人妻一区二区| 男女做爰动态图高潮gif福利片| 久久久国产成人免费| 国产熟女xx| 18禁黄网站禁片免费观看直播| 男人的好看免费观看在线视频 | 欧美在线一区亚洲| 看黄色毛片网站| 亚洲片人在线观看| 两人在一起打扑克的视频| 国产精品免费视频内射| 欧美日韩亚洲综合一区二区三区_| 欧洲精品卡2卡3卡4卡5卡区| 日韩欧美国产一区二区入口| 国产精华一区二区三区| 久久这里只有精品中国| 在线看三级毛片| 久热爱精品视频在线9| 床上黄色一级片| 久久久久国产一级毛片高清牌| 亚洲电影在线观看av| 叶爱在线成人免费视频播放| 欧美最黄视频在线播放免费| 日韩 欧美 亚洲 中文字幕| 亚洲色图 男人天堂 中文字幕| 国产伦在线观看视频一区| 亚洲成人国产一区在线观看| 婷婷丁香在线五月| 国产三级中文精品| 桃红色精品国产亚洲av| 白带黄色成豆腐渣| 天天添夜夜摸| 国产精品电影一区二区三区| 久久天堂一区二区三区四区| 精品久久蜜臀av无| 亚洲专区中文字幕在线| 中亚洲国语对白在线视频| 99国产精品99久久久久| 国产私拍福利视频在线观看| 亚洲免费av在线视频| 一区二区三区激情视频| 岛国在线免费视频观看| 国产激情欧美一区二区| 国产精品久久久人人做人人爽| 国产精品美女特级片免费视频播放器 | 国产黄片美女视频| 极品教师在线免费播放| 高潮久久久久久久久久久不卡| 美女大奶头视频| 国产熟女午夜一区二区三区| 一边摸一边做爽爽视频免费| 免费人成视频x8x8入口观看| 日日爽夜夜爽网站| 色综合亚洲欧美另类图片| 久久这里只有精品19| 国产乱人伦免费视频| 淫秽高清视频在线观看| 免费观看精品视频网站| 他把我摸到了高潮在线观看| 午夜福利成人在线免费观看| 午夜福利18| 日韩大码丰满熟妇| 777久久人妻少妇嫩草av网站| 久久香蕉国产精品| 最新美女视频免费是黄的| 色哟哟哟哟哟哟| 国产精品av视频在线免费观看| 欧美日韩亚洲综合一区二区三区_| 美女 人体艺术 gogo| 9191精品国产免费久久| 日韩三级视频一区二区三区| 精品第一国产精品| 男女下面进入的视频免费午夜| 99热6这里只有精品| 变态另类成人亚洲欧美熟女| 亚洲av熟女| 亚洲中文日韩欧美视频| www.999成人在线观看| 特大巨黑吊av在线直播| av中文乱码字幕在线| 成年人黄色毛片网站| 亚洲va日本ⅴa欧美va伊人久久| 19禁男女啪啪无遮挡网站| svipshipincom国产片| 亚洲精品一区av在线观看| 嫁个100分男人电影在线观看| 在线十欧美十亚洲十日本专区| 久久久水蜜桃国产精品网| 在线播放国产精品三级| 国产一区在线观看成人免费| 亚洲免费av在线视频| 黄色 视频免费看| 精品国产亚洲在线| 亚洲性夜色夜夜综合| 怎么达到女性高潮| 日韩欧美三级三区| 级片在线观看| 久久99热这里只有精品18| 97超级碰碰碰精品色视频在线观看| 国产精品1区2区在线观看.| 舔av片在线| 国产探花在线观看一区二区| 国产免费av片在线观看野外av| 99久久精品国产亚洲精品| 亚洲精品中文字幕在线视频| 黄片大片在线免费观看| 国产精品1区2区在线观看.| 在线观看美女被高潮喷水网站 | 黄色女人牲交| 蜜桃久久精品国产亚洲av| 最好的美女福利视频网| 久久久久性生活片| 欧美+亚洲+日韩+国产| 一本久久中文字幕| 久久香蕉精品热| 啪啪无遮挡十八禁网站| 亚洲专区字幕在线| 午夜福利免费观看在线| 精品高清国产在线一区| 亚洲av日韩精品久久久久久密| 亚洲天堂国产精品一区在线| 国产蜜桃级精品一区二区三区| 免费看日本二区| 午夜福利在线在线| 一进一出抽搐动态| 亚洲人成网站高清观看| 99久久精品热视频| 亚洲国产精品久久男人天堂| 男女下面进入的视频免费午夜| 国产亚洲欧美98| 一进一出抽搐gif免费好疼| 国产精品久久视频播放| 白带黄色成豆腐渣| 啪啪无遮挡十八禁网站| 欧美日韩精品网址| 最近最新中文字幕大全免费视频| 少妇熟女aⅴ在线视频| av在线天堂中文字幕| 看片在线看免费视频| 十八禁网站免费在线| 国产精品永久免费网站| 国产高清激情床上av| 可以免费在线观看a视频的电影网站| 此物有八面人人有两片| 午夜老司机福利片| 亚洲av成人不卡在线观看播放网| 热99re8久久精品国产| 久久婷婷成人综合色麻豆| 高清毛片免费观看视频网站| 国产亚洲精品久久久久久毛片| 啪啪无遮挡十八禁网站| 国产精品98久久久久久宅男小说| 久久天躁狠狠躁夜夜2o2o| 又黄又爽又免费观看的视频| 亚洲av第一区精品v没综合| 好看av亚洲va欧美ⅴa在| 琪琪午夜伦伦电影理论片6080| 国内精品久久久久精免费| 宅男免费午夜| 两个人看的免费小视频| 岛国视频午夜一区免费看| 天堂影院成人在线观看| 国产欧美日韩一区二区三| 日韩欧美在线二视频| 18禁黄网站禁片免费观看直播| 成人国语在线视频| 精华霜和精华液先用哪个| 两人在一起打扑克的视频| 国产精品久久久久久亚洲av鲁大| 老司机午夜十八禁免费视频| 亚洲成人免费电影在线观看| 性色av乱码一区二区三区2| 国产亚洲精品综合一区在线观看 | 久久伊人香网站| 村上凉子中文字幕在线| www国产在线视频色| 色在线成人网| 又爽又黄无遮挡网站| 亚洲乱码一区二区免费版| 国产成人一区二区三区免费视频网站| 亚洲精品在线观看二区| 国产精品亚洲av一区麻豆| 桃红色精品国产亚洲av| 成人特级黄色片久久久久久久| 国产成人影院久久av| 在线观看66精品国产| 欧美黑人巨大hd| 欧美不卡视频在线免费观看 | 老汉色∧v一级毛片| 久久午夜亚洲精品久久| 亚洲精品在线美女| 国产真实乱freesex| 免费在线观看影片大全网站| 别揉我奶头~嗯~啊~动态视频| 两个人的视频大全免费| 99久久国产精品久久久| 人人妻人人澡欧美一区二区| 久久草成人影院| 色在线成人网| 欧美日韩亚洲国产一区二区在线观看| 久久亚洲精品不卡| 亚洲欧洲精品一区二区精品久久久| 国内揄拍国产精品人妻在线| 亚洲欧洲精品一区二区精品久久久| 他把我摸到了高潮在线观看| 精品久久久久久久久久免费视频| 久久精品影院6| 可以在线观看毛片的网站| 久久香蕉国产精品| 亚洲国产日韩欧美精品在线观看 | 亚洲精品美女久久av网站| 久久久精品大字幕| 床上黄色一级片| 一级毛片精品| 久久中文字幕人妻熟女| 亚洲国产精品合色在线| 国产精品久久视频播放| 欧美日韩黄片免| 真人一进一出gif抽搐免费| 两个人的视频大全免费| 国内精品久久久久久久电影| 在线视频色国产色| 亚洲av电影不卡..在线观看| 国产高清激情床上av| 伦理电影免费视频| 国产高清视频在线观看网站| 真人做人爱边吃奶动态| 黄色视频,在线免费观看| 国产熟女xx| 51午夜福利影视在线观看| 久久久久国产精品人妻aⅴ院| 夜夜爽天天搞| 久久久久久免费高清国产稀缺| 亚洲欧美日韩高清专用| 成人国产一区最新在线观看| 亚洲成a人片在线一区二区| 最好的美女福利视频网| 欧美极品一区二区三区四区| 久久这里只有精品中国| 精品久久久久久久久久免费视频| 国产精品日韩av在线免费观看| 国产成人精品久久二区二区免费| 午夜亚洲福利在线播放| 亚洲精品一卡2卡三卡4卡5卡| 18美女黄网站色大片免费观看| 亚洲一区中文字幕在线| 极品教师在线免费播放| 国产精品一区二区免费欧美| 国产三级中文精品| 高清毛片免费观看视频网站| 国产精品国产高清国产av| 亚洲aⅴ乱码一区二区在线播放 | 99热6这里只有精品| 亚洲美女黄片视频| 亚洲avbb在线观看| 亚洲精品色激情综合| 可以在线观看毛片的网站| 久久久久久大精品| 天天一区二区日本电影三级| 日韩高清综合在线| 天天躁夜夜躁狠狠躁躁| 性欧美人与动物交配| 男女下面进入的视频免费午夜| 正在播放国产对白刺激| 久久香蕉国产精品| 中文资源天堂在线| 老鸭窝网址在线观看| 亚洲中文字幕日韩| 女警被强在线播放| av国产免费在线观看| 色尼玛亚洲综合影院| 亚洲av美国av| 在线国产一区二区在线| cao死你这个sao货| 在线观看www视频免费| 在线观看免费午夜福利视频| 天天躁狠狠躁夜夜躁狠狠躁| 久久久久精品国产欧美久久久| 亚洲精品色激情综合| 一区二区三区国产精品乱码| 国产黄色小视频在线观看| 亚洲专区国产一区二区| 久久久国产成人免费| 免费看a级黄色片| 美女扒开内裤让男人捅视频| 中文字幕人妻丝袜一区二区| 91九色精品人成在线观看| 大型av网站在线播放| 亚洲中文字幕日韩| 99热6这里只有精品| av国产免费在线观看| 久久午夜综合久久蜜桃| 久久久久久大精品| 手机成人av网站| 国产精华一区二区三区| 婷婷精品国产亚洲av在线| 午夜福利成人在线免费观看| 日本精品一区二区三区蜜桃| 久久久久免费精品人妻一区二区| 国产精品久久视频播放| 18禁观看日本| 亚洲av电影不卡..在线观看| 亚洲国产欧洲综合997久久,| 女人爽到高潮嗷嗷叫在线视频| 色播亚洲综合网| 国产一级毛片七仙女欲春2| 国产成人av教育| 国产一区在线观看成人免费| 淫妇啪啪啪对白视频| 天天添夜夜摸| 日本成人三级电影网站| 狂野欧美白嫩少妇大欣赏| 久久国产乱子伦精品免费另类| www.熟女人妻精品国产| 国产午夜精品久久久久久| 一本综合久久免费| a在线观看视频网站| 亚洲全国av大片| 特大巨黑吊av在线直播| 男女床上黄色一级片免费看| 亚洲一区二区三区不卡视频| a在线观看视频网站| www.自偷自拍.com| 午夜成年电影在线免费观看| 久久香蕉国产精品| 婷婷亚洲欧美| 99精品久久久久人妻精品| 美女大奶头视频| 久久热在线av| 成在线人永久免费视频| 亚洲精品一卡2卡三卡4卡5卡| 亚洲人成电影免费在线| 五月伊人婷婷丁香| 免费观看精品视频网站| 亚洲av第一区精品v没综合| 亚洲 欧美 日韩 在线 免费| 久久久久性生活片| 亚洲激情在线av| 日韩欧美在线乱码| 1024视频免费在线观看| 久久久久亚洲av毛片大全| 日本三级黄在线观看| 国产三级黄色录像| 午夜激情av网站| 麻豆成人午夜福利视频| 五月伊人婷婷丁香| 脱女人内裤的视频| 日本a在线网址| 亚洲电影在线观看av| 国产区一区二久久| 精品乱码久久久久久99久播| 亚洲一区二区三区不卡视频| 在线观看免费日韩欧美大片| 国产亚洲精品第一综合不卡| 两个人看的免费小视频| 日本免费a在线| 国产99白浆流出| www国产在线视频色| 日本精品一区二区三区蜜桃| 日本熟妇午夜| av福利片在线| 久久这里只有精品中国| 久久久久久久久中文| 麻豆av在线久日| 欧美又色又爽又黄视频| 级片在线观看| 丝袜美腿诱惑在线| 亚洲精品在线美女| 精品久久蜜臀av无| 亚洲熟妇熟女久久| 欧美日韩精品网址| 国产成人一区二区三区免费视频网站| 国产真人三级小视频在线观看| 色尼玛亚洲综合影院| 欧美黄色片欧美黄色片| 男女之事视频高清在线观看| 99国产精品99久久久久| videosex国产| 50天的宝宝边吃奶边哭怎么回事| 久久精品综合一区二区三区| 中文资源天堂在线| 欧美成人性av电影在线观看| 黄色毛片三级朝国网站| 丝袜美腿诱惑在线| 国产黄片美女视频| 两性夫妻黄色片| 12—13女人毛片做爰片一| e午夜精品久久久久久久| 欧美黑人精品巨大| 脱女人内裤的视频| 免费看美女性在线毛片视频| 欧美日韩精品网址| 真人一进一出gif抽搐免费| 人人妻,人人澡人人爽秒播| 欧美中文日本在线观看视频| 午夜a级毛片| 国产69精品久久久久777片 | 久久香蕉精品热| 国产av又大| 人人妻,人人澡人人爽秒播| 99久久综合精品五月天人人| 国产精品久久久久久精品电影| 黄色a级毛片大全视频| 亚洲狠狠婷婷综合久久图片| 亚洲专区字幕在线| 亚洲国产精品成人综合色| 女同久久另类99精品国产91| 亚洲人成电影免费在线| 亚洲自拍偷在线| 国产精品 欧美亚洲| 男女床上黄色一级片免费看| 精品高清国产在线一区| 制服丝袜大香蕉在线| 婷婷亚洲欧美| 日本一二三区视频观看| 91字幕亚洲| 久久久久国产一级毛片高清牌| 免费电影在线观看免费观看| 黄色毛片三级朝国网站| 亚洲欧美一区二区三区黑人| 少妇熟女aⅴ在线视频| 最近最新免费中文字幕在线| 精品国产亚洲在线| 黄色片一级片一级黄色片| 亚洲自拍偷在线| 久久伊人香网站| 亚洲熟妇中文字幕五十中出| 可以在线观看毛片的网站| 久久中文字幕一级| 一级黄色大片毛片| 成人av在线播放网站| 国产精品久久久av美女十八| 制服人妻中文乱码| 九九热线精品视视频播放| 色老头精品视频在线观看| 国产欧美日韩一区二区精品| 亚洲自拍偷在线| 最近最新中文字幕大全电影3| 免费高清视频大片| 久久久久久久久中文| 日日干狠狠操夜夜爽| 日本黄大片高清| 国产视频内射| 两个人免费观看高清视频|