999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

通用高性能網(wǎng)絡(luò)框架的研究與應(yīng)用*

2021-08-06 09:18:48顏光偉陳勃翰
通信技術(shù) 2021年7期

顏光偉,劉 揚(yáng),陳勃翰

(中國電子科技集團(tuán)公司第三十研究所,四川 成都 610041)

0 引 言

隨著網(wǎng)絡(luò)技術(shù)的飛速發(fā)展和廣泛應(yīng)用,不管是面向企業(yè)用戶還是個(gè)人消費(fèi)者,網(wǎng)絡(luò)功能都是應(yīng)用軟件不可或缺的基本功能。目前應(yīng)用軟件的網(wǎng)絡(luò)功能開發(fā)具有過程復(fù)雜、周期漫長、通信協(xié)議不統(tǒng)一和復(fù)用程度低等缺點(diǎn),改善并簡化網(wǎng)絡(luò)通信開發(fā)過程是當(dāng)前應(yīng)用軟件研發(fā)的重要研究方向[1]。互聯(lián)網(wǎng)上的開源網(wǎng)絡(luò)庫也比較多,比如Mudoo、Boost.Asio、ACE、LibEvent等。這些開源庫都實(shí)現(xiàn)了網(wǎng)絡(luò)通信功能封裝,但是無法與應(yīng)用業(yè)務(wù)實(shí)現(xiàn)按需關(guān)聯(lián),且必須二次開發(fā)才能進(jìn)一步滿足應(yīng)用軟件的具體業(yè)務(wù)需求。因此,研究一種通用的高性能網(wǎng)絡(luò)框架對(duì)于簡化應(yīng)用軟件的網(wǎng)絡(luò)開發(fā)工作,提高軟件開發(fā)成果的復(fù)用性具有重要作用。本文基于異步網(wǎng)絡(luò)通信機(jī)制,提出一種通用的高性能網(wǎng)絡(luò)框架實(shí)現(xiàn)方案,能夠滿足應(yīng)用軟件的網(wǎng)絡(luò)通信和業(yè)務(wù)處理需求,使研發(fā)人員更加專注于業(yè)務(wù)層面的用戶需求。

1 相關(guān)技術(shù)介紹

Boost是一個(gè)開源的跨平臺(tái)C++程序庫。它功能組件眾多,很多組件已被收錄進(jìn)C++標(biāo)準(zhǔn),所以也被稱為C++“準(zhǔn)”標(biāo)準(zhǔn)庫[2]。Boost庫提供了常用的網(wǎng)絡(luò)通信、并發(fā)編程、日期與時(shí)間、字符串、正則表達(dá)式等模塊,彌補(bǔ)了C++語言在許多方面的不足,極大增強(qiáng)了C++語言的活力和生命力。Asio是Boost庫中非常出名的用于處理網(wǎng)絡(luò)通信的輕量級(jí)類庫,支持高并發(fā)輸入/輸出(Input/Output,I/O)處理和多種網(wǎng)絡(luò)協(xié)議,內(nèi)部集成了網(wǎng)絡(luò)編程常用的操作接口,并支持同步和異步調(diào)用方式,相關(guān)接口以類的形式進(jìn)行封裝并對(duì)外提供調(diào)用[3]。由于綜合表現(xiàn)出色,Boost.Asio庫正逐漸成為C++網(wǎng)絡(luò)庫的工業(yè)化標(biāo)準(zhǔn),被越來越多的網(wǎng)絡(luò)應(yīng)用作為基礎(chǔ)框架。

Boost.Asio庫的異步網(wǎng)絡(luò)通信采用Proactor模式。在Proactor模式中,任意網(wǎng)絡(luò)操作(accept、connect、send、receive等)都是調(diào)用的異步I/O,在調(diào)用相關(guān)操作接口時(shí)只是向操作系統(tǒng)進(jìn)行了操作注冊,由操作系統(tǒng)進(jìn)行實(shí)際的操作處理,待操作系統(tǒng)完成操作后再通過回調(diào)主動(dòng)通知,實(shí)現(xiàn)后續(xù)的業(yè)務(wù)流程[4]。

2 通用高性能網(wǎng)絡(luò)框架

本文設(shè)計(jì)的網(wǎng)絡(luò)框架采用層次化、模塊化思路,使用C++編程語言進(jìn)行開發(fā),基于Boost.Asio庫實(shí)現(xiàn)高性能異步網(wǎng)絡(luò)通信,通過XML實(shí)現(xiàn)框架內(nèi)外的關(guān)聯(lián)配置,適用于傳輸控制協(xié)議(Transmission Control Protocol,TCP)、用戶數(shù)據(jù)報(bào)協(xié)議(User Datagram Protocol,UDP)、Internet控制報(bào)文協(xié)議(Internet Control Message Protocol,ICMP)、原始套接字(Raw Socket,RAW)網(wǎng)絡(luò)通信模式,可以滿足軟件輕量級(jí)、高并發(fā)的網(wǎng)絡(luò)通信需求,具有跨平臺(tái)、高性能、通用性、伸縮性、可維性和擴(kuò)展性等特點(diǎn)。

2.1 框架架構(gòu)

框架依據(jù)層次化設(shè)計(jì)思路,從下到上依次分為共享操作層、服務(wù)調(diào)度層、業(yè)務(wù)邏輯層和業(yè)務(wù)接口層4個(gè)層級(jí)(見圖1)。共享操作層包含與業(yè)務(wù)邏輯無關(guān)的可復(fù)用基礎(chǔ)操作集合,這些常用操作在優(yōu)秀開源庫的基礎(chǔ)上進(jìn)行二次封裝,實(shí)現(xiàn)已有成果的重用,避免重復(fù)造輪子[5];服務(wù)調(diào)度層是整個(gè)框架的核心,以Boost.Asio庫的異步網(wǎng)絡(luò)通信為基礎(chǔ),進(jìn)行框架內(nèi)外消息數(shù)據(jù)的通信調(diào)度,實(shí)現(xiàn)業(yè)務(wù)邏輯與協(xié)議數(shù)據(jù)的“透明”耦合;業(yè)務(wù)邏輯層包含具體業(yè)務(wù)操作集合,依據(jù)模塊化思路進(jìn)行業(yè)務(wù)邏輯獨(dú)立封裝,業(yè)務(wù)之間通過統(tǒng)一接口進(jìn)行關(guān)聯(lián)操作;業(yè)務(wù)接口層實(shí)現(xiàn)框架內(nèi)外通信接口,內(nèi)部接口以接口函數(shù)方式基于統(tǒng)一格式進(jìn)行封裝,外部接口以網(wǎng)絡(luò)服務(wù)方式對(duì)外提供。

服務(wù)調(diào)度層由異步I/O、消息調(diào)度子層、網(wǎng)絡(luò)協(xié)議子層和業(yè)務(wù)協(xié)議子層組成,通過接口進(jìn)行通信。異步I/O基于Boost.Asio庫實(shí)現(xiàn)大規(guī)模網(wǎng)絡(luò)連接高效率并發(fā)處理;消息調(diào)度子層將網(wǎng)絡(luò)連接抽象為網(wǎng)絡(luò)會(huì)話進(jìn)行全生命期的異步跟蹤,對(duì)異步I/O的網(wǎng)絡(luò)操作通知及時(shí)分配工作線程池中的空閑線程進(jìn)行處理,將任意業(yè)務(wù)邏輯與網(wǎng)絡(luò)操作行為(accept、connect、send、receive、close)的關(guān)系通過狀態(tài)機(jī)模型建立異步關(guān)聯(lián),實(shí)現(xiàn)任意復(fù)雜業(yè)務(wù)的操作流水化,并通過XML配置實(shí)現(xiàn)消息調(diào)度、網(wǎng)絡(luò)協(xié)議、業(yè)務(wù)協(xié)議和業(yè)務(wù)邏輯之間的按需關(guān)聯(lián);網(wǎng)絡(luò)協(xié)議子層實(shí)現(xiàn)TCP、UDP等通用網(wǎng)絡(luò)協(xié)議的異步調(diào)用接口;業(yè)務(wù)協(xié)議子層實(shí)現(xiàn)業(yè)務(wù)數(shù)據(jù)格式解析和封裝,使業(yè)務(wù)邏輯不因業(yè)務(wù)協(xié)議的變化而修改,達(dá)到業(yè)務(wù)協(xié)議對(duì)業(yè)務(wù)邏輯透明。

2.2 框架內(nèi)部關(guān)聯(lián)關(guān)系

服務(wù)調(diào)度層的異步I/O負(fù)責(zé)具體的網(wǎng)絡(luò)操作,網(wǎng)絡(luò)協(xié)議子層負(fù)責(zé)網(wǎng)絡(luò)數(shù)據(jù)(包含業(yè)務(wù)數(shù)據(jù)和管理數(shù)據(jù))收發(fā),并在對(duì)應(yīng)的網(wǎng)絡(luò)操作完成后回調(diào)通知消息調(diào)度子層,由消息調(diào)度子層依據(jù)網(wǎng)絡(luò)操作行為進(jìn)行協(xié)議數(shù)據(jù)解析驗(yàn)證,依據(jù)解析驗(yàn)證結(jié)果調(diào)用業(yè)務(wù)邏輯層的具體業(yè)務(wù)模塊進(jìn)行業(yè)務(wù)邏輯處理。

業(yè)務(wù)過程如果需要進(jìn)行業(yè)務(wù)數(shù)據(jù)收發(fā),則通過業(yè)務(wù)協(xié)議子層進(jìn)行數(shù)據(jù)收發(fā)通知,并通過網(wǎng)絡(luò)協(xié)議子層完成網(wǎng)絡(luò)操作。在發(fā)送數(shù)據(jù)時(shí),通過業(yè)務(wù)協(xié)議子層完成業(yè)務(wù)協(xié)議數(shù)據(jù)封裝,實(shí)現(xiàn)業(yè)務(wù)邏輯與協(xié)議數(shù)據(jù)格式的“透明”耦合,業(yè)務(wù)邏輯不用關(guān)心具體的業(yè)務(wù)協(xié)議數(shù)據(jù)格式,進(jìn)入業(yè)務(wù)邏輯都是已經(jīng)剝離相關(guān)業(yè)務(wù)協(xié)議格式的原始業(yè)務(wù)數(shù)據(jù),實(shí)現(xiàn)相同業(yè)務(wù)邏輯在不同項(xiàng)目的重復(fù)使用。框架內(nèi)部關(guān)聯(lián)關(guān)系詳見圖2。

2.3 業(yè)務(wù)協(xié)議接口設(shè)計(jì)

業(yè)務(wù)協(xié)議子層采用C++多態(tài)機(jī)制,完成業(yè)務(wù)協(xié)議數(shù)據(jù)網(wǎng)絡(luò)收發(fā)通知、格式封裝和解析驗(yàn)證,實(shí)現(xiàn)業(yè)務(wù)協(xié)議格式與業(yè)務(wù)邏輯的彼此獨(dú)立和按需組合。

框架支持定長和不定長兩種業(yè)務(wù)協(xié)議數(shù)據(jù)。定長業(yè)務(wù)協(xié)議數(shù)據(jù)區(qū)分協(xié)議頭和協(xié)議體兩部分,網(wǎng)絡(luò)接收數(shù)據(jù)時(shí)先收協(xié)議頭,然后進(jìn)行協(xié)議頭解析并獲取協(xié)議體長度,接著繼續(xù)接收協(xié)議體。待對(duì)應(yīng)的協(xié)議頭和協(xié)議體數(shù)據(jù)接收完成后,再進(jìn)行業(yè)務(wù)數(shù)據(jù)的完整解析驗(yàn)證,并在完成驗(yàn)證后將數(shù)據(jù)送入業(yè)務(wù)模塊處理。對(duì)于沒有區(qū)分固定協(xié)議頭和協(xié)議體的不定長數(shù)據(jù),按照“應(yīng)收盡收”原則,盡可能接收足夠數(shù)據(jù)。網(wǎng)絡(luò)發(fā)送數(shù)據(jù)前對(duì)待發(fā)送數(shù)據(jù)按照業(yè)務(wù)協(xié)議格式進(jìn)行封裝,然后再進(jìn)行發(fā)送。

業(yè)務(wù)協(xié)議子層模塊部分接口設(shè)計(jì)如下:

// 接收固定協(xié)議頭

virtual int async_recv_head(IN CSession*session,IN u_int timeout) = 0;

// 接收固定協(xié)議體

virtual int async_recv_body(IN CSession*session,IN u_int timeout) = 0;

// 接收不固定協(xié)議數(shù)據(jù)

virtual int async_recv_some(IN CSession*session,IN u_int minlen,IN u_int timeout) = 0;

// 發(fā)送協(xié)議數(shù)據(jù)(協(xié)議頭+協(xié)議體)

virtual int async_send_buf(IN CSession *session,IN u_int timeout) = 0;

// 解析驗(yàn)證接收到的協(xié)議頭

virtual int unpackaging_head(IN CSession *session)= 0;

// 解析驗(yàn)證接收到的協(xié)議體

virtual int unpackaging_body(IN CSession *session)= 0;

// 封裝協(xié)議頭

virtual int packaging_head(IN CSession *session) = 0;

// 封裝協(xié)議體

virtual int packaging_body(IN CSession *session,IN const void *value = NULL,IN u_int value_size = 0,IN u_int value_len = 0) = 0;

3 系統(tǒng)實(shí)現(xiàn)的關(guān)鍵技術(shù)

3.1 網(wǎng)絡(luò)會(huì)話設(shè)計(jì)

為了確保數(shù)據(jù)在業(yè)務(wù)生命周期內(nèi)的完整性、有效性和唯一性,以及業(yè)務(wù)處理過程中對(duì)數(shù)據(jù)訪問的便捷性和及時(shí)性,框架將網(wǎng)絡(luò)連接及關(guān)聯(lián)數(shù)據(jù)抽象為網(wǎng)絡(luò)會(huì)話(自定義類CSession),實(shí)現(xiàn)網(wǎng)絡(luò)連接生命期內(nèi)統(tǒng)一管理。網(wǎng)絡(luò)會(huì)話涉及業(yè)務(wù)過程中發(fā)生的完整關(guān)聯(lián)數(shù)據(jù)集合,包含網(wǎng)絡(luò)套接字、數(shù)據(jù)庫連接、業(yè)務(wù)模塊以及業(yè)務(wù)數(shù)據(jù)等,如圖3所示。

網(wǎng)絡(luò)會(huì)話的生命周期與網(wǎng)絡(luò)連接保持一致,隨著網(wǎng)絡(luò)連接的建立而創(chuàng)建,網(wǎng)絡(luò)連接的關(guān)閉而銷毀。但是在大規(guī)模網(wǎng)絡(luò)連接并發(fā)訪問場景中,為避免頻繁進(jìn)行資源分配、銷毀而影響業(yè)務(wù)性能,在關(guān)閉網(wǎng)絡(luò)連接時(shí)并不進(jìn)行網(wǎng)絡(luò)會(huì)話的銷毀,而只是進(jìn)行網(wǎng)絡(luò)套接字的關(guān)閉和關(guān)聯(lián)數(shù)據(jù)的復(fù)位,并在新的網(wǎng)絡(luò)連接建立后再次關(guān)聯(lián)使用。數(shù)據(jù)庫連接通過配置實(shí)現(xiàn)數(shù)據(jù)庫類型及其他數(shù)據(jù)庫訪問參數(shù)的讀取,基于“一線程一實(shí)例”原則進(jìn)行創(chuàng)建,運(yùn)行多少個(gè)工作線程就建立相應(yīng)數(shù)量的數(shù)據(jù)庫連接,并在工作線程進(jìn)行業(yè)務(wù)處理前與網(wǎng)絡(luò)會(huì)話進(jìn)行綁定,實(shí)現(xiàn)業(yè)務(wù)過程中基于網(wǎng)絡(luò)會(huì)話的數(shù)據(jù)庫訪問操作,又避免多線程并發(fā)業(yè)務(wù)導(dǎo)致的數(shù)據(jù)庫訪問沖突。業(yè)務(wù)協(xié)議子層在完成業(yè)務(wù)協(xié)議數(shù)據(jù)解析后,能夠獲取業(yè)務(wù)標(biāo)識(shí),并依據(jù)業(yè)務(wù)標(biāo)識(shí)在首次業(yè)務(wù)處理前進(jìn)行業(yè)務(wù)模塊的創(chuàng)建,并在網(wǎng)絡(luò)會(huì)話關(guān)閉時(shí)進(jìn)行業(yè)務(wù)模塊的銷毀。業(yè)務(wù)數(shù)據(jù)包含獨(dú)立的網(wǎng)絡(luò)發(fā)送和接收緩沖區(qū),以便實(shí)現(xiàn)網(wǎng)絡(luò)全雙工通信,在業(yè)務(wù)過程中可以依據(jù)需要進(jìn)行收發(fā)緩沖區(qū)的交換而避免數(shù)據(jù)拷貝,實(shí)現(xiàn)業(yè)務(wù)數(shù)據(jù)快速發(fā)送。

在業(yè)務(wù)過程中,業(yè)務(wù)A創(chuàng)建了業(yè)務(wù)B,此時(shí)稱業(yè)務(wù)A為父業(yè)務(wù),業(yè)務(wù)B為子業(yè)務(wù)。父業(yè)務(wù)創(chuàng)建子業(yè)務(wù)時(shí),通過將父業(yè)務(wù)的網(wǎng)絡(luò)會(huì)話傳遞給子業(yè)務(wù),此時(shí)父業(yè)務(wù)和子業(yè)務(wù)都可以獲得對(duì)方的網(wǎng)絡(luò)會(huì)話,實(shí)現(xiàn)相同網(wǎng)絡(luò)會(huì)話在多個(gè)關(guān)聯(lián)業(yè)務(wù)間流轉(zhuǎn),滿足業(yè)務(wù)關(guān)聯(lián)數(shù)據(jù)的快速共享訪問,提高業(yè)務(wù)消息傳遞效率。

3.2 組件化設(shè)計(jì)

框架的所有模塊依據(jù)“一業(yè)務(wù)、一模塊”原則,使用C++類進(jìn)行業(yè)務(wù)邏輯封裝,并生成獨(dú)立動(dòng)態(tài)庫。業(yè)務(wù)間通過接口進(jìn)行耦合,特定業(yè)務(wù)流程或者邏輯修改不影響其他業(yè)務(wù),同時(shí)采用XML配置決定上線運(yùn)行的模塊以及模塊間的業(yè)務(wù)關(guān)聯(lián)關(guān)系。框架通過網(wǎng)絡(luò)服務(wù)對(duì)外提供接口,并使用XML配置網(wǎng)絡(luò)服務(wù)的相關(guān)參數(shù),實(shí)現(xiàn)網(wǎng)絡(luò)服務(wù)與業(yè)務(wù)的關(guān)聯(lián)綁定。如圖4所示。

網(wǎng)絡(luò)服務(wù)的配置涉及網(wǎng)絡(luò)參數(shù)、網(wǎng)絡(luò)協(xié)議模塊、業(yè)務(wù)協(xié)議模塊、消息調(diào)度模塊、數(shù)據(jù)庫模塊和業(yè)務(wù)模塊集合等。網(wǎng)絡(luò)參數(shù)包含服務(wù)地址和端口、連接超時(shí)值、收發(fā)數(shù)據(jù)超時(shí)值、收發(fā)數(shù)據(jù)緩沖區(qū)大小等;網(wǎng)絡(luò)協(xié)議模塊確定網(wǎng)絡(luò)服務(wù)所采用的通用基礎(chǔ)網(wǎng)絡(luò)協(xié)議,如TCP、UDP、ICMP、原始套接字等;業(yè)務(wù)協(xié)議模塊與具體項(xiàng)目相關(guān),實(shí)現(xiàn)具體業(yè)務(wù)邏輯關(guān)聯(lián)的應(yīng)用層數(shù)據(jù)格式;消息調(diào)度模塊決定采用哪一種消息調(diào)度器,實(shí)現(xiàn)消息數(shù)據(jù)的調(diào)度處理;數(shù)據(jù)庫模塊包含項(xiàng)目采用的數(shù)據(jù)庫類型(如MySQL)、數(shù)據(jù)庫訪問參數(shù)(如登錄賬戶信息等)和訪問數(shù)據(jù)庫的接口(如unixODBC接口);業(yè)務(wù)模塊通過業(yè)務(wù)標(biāo)識(shí)唯一確認(rèn)具體業(yè)務(wù),只有配置在該網(wǎng)絡(luò)服務(wù)中的業(yè)務(wù)模塊才允許被觸發(fā)調(diào)用。

框架部分XML配置如下:

4 框架應(yīng)用

該框架在2G的可用內(nèi)存中實(shí)現(xiàn)了20萬網(wǎng)絡(luò)連接并發(fā)收發(fā)數(shù)據(jù)測試,對(duì)接了達(dá)夢、金倉、MySQL等國產(chǎn)化和非國產(chǎn)化的多種類型數(shù)據(jù)庫,并已經(jīng)在實(shí)際多個(gè)項(xiàng)目進(jìn)行應(yīng)用,涉及軟硬件結(jié)合項(xiàng)目和純軟件項(xiàng)目,涵蓋x86、PowerPC、龍芯、兆芯、飛騰、Windows、Linux、中科方德、中標(biāo)麒麟等眾多軟硬件組合的非國產(chǎn)化和國產(chǎn)化環(huán)境。各個(gè)項(xiàng)目重用了除部分業(yè)務(wù)協(xié)議模塊、業(yè)務(wù)模塊外的框架其他成果,并依據(jù)實(shí)際項(xiàng)目情況調(diào)整了部分框架參數(shù),同時(shí)在此基礎(chǔ)上進(jìn)行擴(kuò)展開發(fā),實(shí)現(xiàn)了工作成果的復(fù)用。

5 結(jié) 語

本文針對(duì)當(dāng)前應(yīng)用軟件研發(fā)過程中出現(xiàn)的網(wǎng)絡(luò)功能開發(fā)復(fù)雜、開發(fā)成本大、網(wǎng)絡(luò)框架無法通用等問題研究了一種通用的高性能網(wǎng)絡(luò)框架,并基于C++編程語言進(jìn)行了實(shí)現(xiàn),使用第三方軟件對(duì)實(shí)現(xiàn)結(jié)果進(jìn)行了通信效果測試,驗(yàn)證了框架的應(yīng)用效果。同時(shí),該框架已經(jīng)在多個(gè)項(xiàng)目進(jìn)行復(fù)用,滿足了不同項(xiàng)目的業(yè)務(wù)需求,降低了項(xiàng)目的研發(fā)成本。

主站蜘蛛池模板: 欧美黄网站免费观看| 呦视频在线一区二区三区| 国外欧美一区另类中文字幕| 亚洲综合国产一区二区三区| 在线看片中文字幕| 精品国产中文一级毛片在线看| 欧美有码在线| 欧美一区二区三区国产精品| 国产区在线看| 久久久国产精品无码专区| 日韩天堂在线观看| 99中文字幕亚洲一区二区| 亚洲欧美另类色图| 久久情精品国产品免费| a毛片在线播放| 国产成人永久免费视频| 人人爱天天做夜夜爽| 爱色欧美亚洲综合图区| 亚洲综合精品香蕉久久网| 狠狠综合久久| 久久这里只有精品8| 久久精品中文无码资源站| 欧美成人午夜在线全部免费| 日韩午夜福利在线观看| 国产丰满成熟女性性满足视频| 青青极品在线| 日本不卡在线视频| 91精品国产丝袜| 91精品国产91久无码网站| 一级毛片免费观看不卡视频| 色综合中文| 国产成人资源| 精品伊人久久大香线蕉网站| 91丝袜在线观看| 午夜福利无码一区二区| 国产91精品久久| 亚洲香蕉在线| 五月婷婷亚洲综合| 在线观看无码av免费不卡网站| 日本国产精品| 无码精品一区二区久久久| 亚洲男女在线| 国产日韩欧美一区二区三区在线 | 免费无码一区二区| 国产va欧美va在线观看| AV不卡无码免费一区二区三区| 亚洲精品少妇熟女| 亚洲成a人片| 欧美亚洲第一页| a毛片免费观看| 国产哺乳奶水91在线播放| 日韩国产精品无码一区二区三区| 欧美日韩高清| AV在线天堂进入| 精品国产网站| 四虎国产精品永久一区| 亚洲欧美极品| 免费精品一区二区h| 伊人福利视频| 四虎亚洲精品| 亚洲欧美另类日本| 中文字幕在线免费看| 欧美精品啪啪一区二区三区| 成人精品视频一区二区在线 | 亚洲高清中文字幕| 国产AV毛片| 精品国产免费观看一区| 在线中文字幕日韩| 再看日本中文字幕在线观看| 精品少妇人妻av无码久久| 国产免费高清无需播放器| 色悠久久久| 久久精品国产亚洲麻豆| 伊人成人在线| 国产AV无码专区亚洲A∨毛片| 国产精品亚洲综合久久小说| 亚洲毛片网站| 亚洲欧美在线综合图区| 97视频在线精品国自产拍| 国产精品xxx| 国产特级毛片| 伦精品一区二区三区视频|