青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Fork me on GitHub
隨筆 - 215  文章 - 13  trackbacks - 0
<2015年11月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345


專注即時通訊及網游服務端編程
------------------------------------
Openresty 官方模塊
Openresty 標準模塊(Opm)
Openresty 三方模塊
------------------------------------
本博收藏大部分文章為轉載,并在文章開頭給出了原文出處,如有再轉,敬請保留相關信息,這是大家對原創作者勞動成果的自覺尊重!!如為您帶來不便,請于本博下留言,謝謝配合。

常用鏈接

留言簿(1)

隨筆分類

隨筆檔案

相冊

Awesome

Blog

Book

GitHub

Link

搜索

  •  

積分與排名

  • 積分 - 220943
  • 排名 - 117

最新評論

閱讀排行榜

http://blog.chinaunix.net/uid-429659-id-3396370.html

新一代MMO架構

 

原文件Pdf下載: Next_Generation_MMO_Architecture.zip   

官網下載:http://www.next-gen.cc/index.php?option=com_content&view=article&id=2&Itemid=3

nextgen架構官網:http://www.next-gen.cc

 

 

 

                                               翻譯:趙月明

 

摘要

 

本文闡述了一種MMO架構的實現,架構充分利用了微線程和多核處理器,使服務器能夠承載更多的玩家。本方案使用erlang實現服務器集群,并將游戲世界實現分區。

 

I 介紹

MMOG(大型多人在線游戲)讓數千計甚至數以百萬計的人玩同一個游戲。新一代MMO 將提供一個高動態的游戲設計。讓游戲設計者的設計充分自由將提升了技術門檻。

Achterbosch,皮爾斯,西蒙斯(2008),對下一代MMO期望是什么這兒問題調查了122人。

 

當問及到什么樣的特性是令人滿意的,受訪者提出了一些想法:

    作為6.2.1指出的,寧愿玩家影響世界,許多受訪者轉而提議:

世界靠其自身的自然環境事件發生改變。這些例子包括毀滅森林的火災,淹沒陸地的洪水,生長的植被,衰減的人類建筑和道路等等。這要創造一個身臨其境的世界,只是增加了晝夜循環和過去天氣的改變。燃燒的森林可能最終再生,洪水可能平息,還有npc(非游戲角色)可能維護衰退的地區,以至于世界沒有發生戲劇性的改變。

 

    另一個有趣但視為不可行的建議:許多受訪者相信他們的角色應該能夠產生影響,在游戲世界中,會永遠完全的改變它。一個任務中的部分生物和NPC,每一個玩家完成任務之后都要重置,以便下一個玩家完成同樣的任務。這通常被稱為重生。

 

當一個被殺的怪在世界里完全健康的重置,被稱為重生。一個參與調查者提出:開發者永遠改變世界,使怪或者任務不能重生。

 

問題是:早晚沒有任務留下,沒有怪獸留下去被殺死。因為玩家已經完成任務,并殺死了所有的怪獸。開發者必須趕在玩家完成之前,快速的創造出新的任務。 這是不可能的。

 

    游戲開發者不斷地創造新的內容視乎是不可行的,但是動態設計游戲能夠自動的搜索適當的時機建立任務。

 

動態NPC也是一項受訪者期望并有技術挑戰的特色。受訪者表示,NPC過于靜態,因此在提升游戲真實體驗方面,NPC應該進行一些日常的活動。如同在單人游戲里一樣被遺忘。

 

大多數情況下,友好的NPC晝夜閑站著等待玩家與他們溝通,在這種情況下他們只有一個目的,快速執行簡單的一句話,商店購物,或者給玩家一個任務。敵人的NPC趨向于站著等死。

一個受訪者建議,NPC可以被雇傭,做一些搜集資源保護建筑物的任務。

據一些受訪者所說,NPC除了站立還會有一個目的用途。

另一個受訪者建議:玩家應該有NPC敵人的選擇權,用很小的時間間隔來增大預測難度。就像龍與地下城中的地下城主的情況。

下一代的MMO特性要求架構先進, 允許動態游戲設計、分發和縮放。在大多數編程語言中,這是一個難以處理的任務。要開發滿足這些需求的服務,需要新工具和編程語言提供更好的支持。

如果這一需求能夠實現,玩家會有豐富的體驗,讓他們感覺到在自己的影響下,世界發生持續改變。

 

II 背景

基本上有兩種不同類型的MMOG架構:服務器-客戶端模式和點對點。

A客戶/服務器結構

通過(Cai, Xavier, Turner, and Lee, 2002) (Gil, Tavares, and Roque, 2005)的討論,集中服務器-客戶端實現是現在最普遍的MMO’S架構方案。每個玩家通過客戶端連接游戲服務。服務器可以驗證客戶端發送的所有信息和防作弊。,讓服務器處理所有的事件,可以非常容易的保持世界的一致性狀態。

 

問題是在于,當玩家連接足夠多時,服務器將耗盡硬件資源,然后拒絕更多的連接。解決這個問題最常見的方案是:分區,游戲復制到許多分區服務器上,這些服務器上存儲了數以千計的玩家,并維持他們在世界中的狀態。

 

負面效應是,玩家基地被孤立的分布在這些服務器上。意味著如果兩個朋友想在一起玩,他們必須在同一臺服務器上。另一個問題是平衡人口,如果服務器有很多玩家,人們不得不等待一個長隊來登錄。如果一個服務器玩家很少,人們可能很難有機會和其他玩家一起玩,這樣就降低了游戲的玩法。

 

B 點對點架構

分散的點對點實現是通過by (Hampel, Bopp, and Hinn, 2007)

(el Rhalibi and Merabti, 2005)提出的,他讓每個客戶端成為一個地理有限區域的服務器。這避免了使用集中服務的伸縮性問題,但很大程度上提升了作弊的風險,增大了所有玩家狀態連貫性維護的復雜性。

 

C  Erlang

Erlang 是一個內置并發性的語言,erlang為每一個對象或任務創建一個輕型進程,代替一個連續運行的主循環.每個進程都有其自己的主循環。依賴于硬件,一個普通的桌面計算機可以建立數以萬計的進程。Erlang附帶了一個稱為OTP(開放通信平臺)的平臺。為構建服務,OTP提供了通用的設計模式:狀態機、容錯系統、實行熱代碼升級。Erlang也有自己的分布式數據庫系統Mneisa.如果架構用c++或者java實現,這些特色必須從頭開發或者

借助于第三方庫。 erlang 代碼被組織在被稱為模塊的文件里,模塊里是被寫好的函數。據(Nystr?m, 2004)說,選擇erlang為實現語言,通過使用其輕量級的進程就能使服務器的性能得到顯著提升。

 

D 理論研究

在近期流行的這些游戲中,有許多對提升MMO的研究。與本架構最相關的是對世界分區的研究。此研究就是在本章節中對討論和批評。

有兩個商業項目Eve Online (CCP) Second Life (Linden Lab)使用了將世界分成子區域的技術。

研究論文如(Chen, Wu, Knutsson, Lu, and Amza, 2005), (Yamamoto, Murat, Yasumoto, and Ito, 2005) (Bossche, Verdickt, and Vleeschauwer, 2006)提到以允許架構平衡的方式將游戲劃分成一些子區域。當一個子區域變得有負載的時候,建議移植到新的服務器。使用這樣一個伸縮性的限制,一個子地區的玩家數量不可能超過計算機負載人數上限。By assigning the computers to sub areas instead removes this limitation. (聯系上下文,沒翻譯出來)所需要的是子區域狀態必須分布在指定的計算機上。

 

E 商業項目

 

EvE在線是一個發生在太空的游戲。架構將世界劃分為若干子地區(星系)。集群包括刀片服務器,也稱為節點。每個星系駐留在一個節點上。若干星系可以共享一個節點。玩家在節點間無縫轉移。當一個玩家“跳”到另一個恒星系統,一個加載屏幕出現而轉移發生。

據稱,約60名玩家一起參加戰斗足以搞垮一個節點。如果節點移動到一臺專業的服務器上,大約能夠負載大約1000次戰斗或者交換玩家。利用機器所有的CPU內核資源是一個令開發者感到棘手問題。在集群中,有大約五成的內核處于閑置狀態。?insertref? EvE 服務器實現所用的命令式設計語言 python的東西。 Python開發人員稱之為“全局解釋器鎖”。在其內部主要部分沒有重新設計的情況下,他有效的阻止Python使用多核。

 

第二人生(游戲名稱)也有類似的地區服務器架構。當無縫轉移玩家時,他們穿過了世界。沒有前端集群服務器為客戶端進行通訊。客戶端保持四個連接,連接最近的四個地區服務器。

地區服務器將所有數據流實時傳給玩家,沒有內容保存硬盤,這樣使客戶端會很小。

 

III  推薦建構

 

如圖1所示:架構由四個類型的服務器通過一個計算機集群組成。服務器由:鏈接服務器,賬戶服務器,角色服務器,區域服務器。這些服務器運行在一個計算機網絡(局域網)的不同服的計算機上。然而這不是必需的,所有的服務器也可以配置部署在同一臺計算機上。服務器軟件用Erlang實施,因為他具有并發、容錯和分布式特性。客戶端通過互聯網鏈接到鏈接服務器鏈接服務器操縱客戶端和其他服務器之間的通訊。該帳戶服務器包含用于驗證登錄的賬戶信息。所有的玩家角色存儲在角色服務器上,角色是玩家在游戲中的替身或者實體。地區服務器應該運行的像一個地理網格連接地區。如圖2所示, 他們在一起,是一個玩家相互作用的世界。每個服務器運行在一個由名稱、@和主機名稱組成的節點上。例如:完整的節點名稱是start_area@myserver。 start_area是節點名,myserver是主機名。節點名作用于運行在不同計算機上的服務器之間的通訊。

 

 

A 客戶端

 

客戶端是運行在玩家計算機上的程序。通過互聯網與鏈接服務器建立鏈接。客戶端是系統中非常重要的部分,但不屬于架構的內容。只要是能夠建立TCP鏈接,能夠與服務器發送和接受數據的語言就能實現。客戶端的目的是通過圖像或者文本接口為玩家展示世界。

B 鏈接服務器

 

    鏈接服務器等待客戶端的鏈接,服務于集群的前端。客戶端從不會直接與其他服務器直接通訊,所有與客戶端的通訊必須通過鏈接服務器。為每個客戶端創建一個鏈接進程。鏈接進程是一個在四種狀態間變化的簡單有限狀態機。

*鏈接狀態:客戶端已經建立一個鏈接,但是沒有發送任何進一步的指令請求。

*大廳狀態:客戶端已經登錄賬號,瀏覽或者在游戲中建立了實體。

*玩:客戶端已經用一個實體聯機,目前正在游戲中玩。

*鏈接丟失狀態:客戶端已經失去鏈接。鏈接服務器保持玩家有效,給他一個再次登錄的機會繼續玩游戲。當斷開時間超時,鏈接服務器斷開session并終止。

 

賬戶服務器

 

如圖3所示:賬戶服務器在一個Mneisa數據庫中存儲了所有的用戶賬號信息。如圖3所示:賬戶服務器在一個Mneisa數據庫中存儲了所有的用戶賬號信息。通過賬號和密碼驗證玩家的合法性。

 

 

 D  角色服務器

 

        如圖4所示:角色服務器存儲了所有的角色數據。每個賬戶能創建能夠登陸游戲世界的新角色。服務器提供了保存和創建新角色的功能。

 

 

 

E 地區服務器

 

地區服務器是集群中最復雜的服務器。他管理一個世界中的一個地區。為在地區服務器加載完成的每一個角色或對象,創建一個保存其狀態的進程。圖5闡述此過程。在游戲世界里,每個進程有一個通過erlang生成的自定義id和一個作為唯一標示id。唯一標示id和進程id存儲在一個用來查詢對象的數據庫中。

 

F 動態特性

 

如圖6所示,地區服務器有一個模塊化的構建。它核心是僅僅提供了一個簡單事件注冊和啟動與選擇函數庫的能力。這些庫依次為地區服務器提供所有的功能。這些函數庫在運行時,可以編譯、重新編譯、啟動和停止。他們為開發和測試提供了新類庫,例如一個戰斗系統無需重新啟動服務器。

 

架構提供了三個默認庫:

 

* libstd:這個庫提供了基本的功能,如注冊/檢索對象、對象記錄和熱代碼升級。

* libchar:這個庫允許角色在地區服務器登錄。

*libdist: 這個庫允許一個地區服務在集群中跨多個計算機分發。

 

注意不是直接啟動庫,而是啟動他們的監督者。依次啟動庫以及庫運行所需要的其他任何進程。這樣,模塊libstd_sup提供了一個開始函數代替libstd。在erlang中,監督者是一個監督其他進程的的進程,如果一個進程崩潰,監督者進程會重啟它。下面是一個命令啟動一個庫展示:

 

  1. lib_sup:start(libstd_sup).

  2. =PROGRESS REPORT==== 7-Jul-2009::12:34:09

  3. supervisor: {local,libstd_sup}

  4. started: [{pid,<0.270.0>},

  5. {name,’LibStd’},

  6. {mfa,{libstd,start_link,[std_funs]}},

  7. {restart_type,permanent},

  8. {shutdown,2000},

  9. {child_type,worker}]

  10. =PROGRESS REPORT==== 7-Jul-2009::12:34:09

  11. supervisor: {local,libstd_sup}

  12. started: [{pid,<0.271.0>},

  13. {name,’ObjectSupervisor’},

  14. {mfa,{obj_sup,start_link,[]}},

  15. {restart_type,permanent},

  16. {shutdown,2000},

  17. {child_type,supervisor}]

  18. =PROGRESS REPORT==== 7-Jul-2009::12:34:09

  19. supervisor: {local,lib_sup}

  20. started: [{pid,<0.269.0>},

  21. {name,libstd_sup},

  22. {mfa,{libstd_sup,start_link,[]}},

  23. {restart_type,transient},

  24. {shutdown,infinity},

  25. {child_type,supervisor}]

  26. {ok,<0.269.0>}


用下面的命令關閉一個庫:

 

 

  1. lib_sup:stop(libstd_sup).

  2. Ok


另一個動態特性被稱為熱代碼交換。這使得Erlang在運行的同時升級代碼。為此,一個名為upgrade的函數被添加到類庫libstd。接下來一個例子,對模塊libchar做了修改之后,新的代碼成功編譯,通過以下命令完成升級:

  1. libstd:upgrade(libchar).

  2. {module, libchar}


Erlang允許兩個版本的代碼同時運行。當升級函數被調用的模塊作為參數時,erlang讓當前運行的代碼為舊的,讓已升級的作為現在的。升級之后,當前代碼(新)被使用,原來執行舊代碼的所有進程,在下個函數調用時將被升級。

 

G 分布

 

數臺電腦可以管理同一個地區服務器。如圖7中,兩臺分別名為server1server2的計算機運行各自名為start_area節點。運行下面的命令,從節點start_area@server2將關聯位于start_area@server1的分布式對象記錄。

  1. libstd:join(start_area@server1).

  2. {ok, [start_area@server1]}


 

分布式對象記錄是一個Mnesia數據庫,存儲的信息和本地對象記錄一樣,不同之處是分布式對象記錄不只是包含本地進程,還有所有地區服務器中的管理同一個地區的所有進程。(不知道翻譯的對不對)

如果start_area@server2往分布式對象記錄中寫數據,erlang也同樣將修改同步到start_area@server1。erlang進程id在本地是透明的,這就意味著如果進程運行在同一個本地機器或者同一個網絡中的另一臺計算機,他們的通訊是沒有問題的。分布式注冊對象表將start_area@server1start_area@server2鏈接在一起,這就使他們如同在同一個地區服務器上操作一樣。

 

G1  負載均衡

 

libdist庫提供動態負載分布的特征

當管理同一片區域的所有服務器開啟時更新分布式Mnsia表。分布式庫通過檢查本地區域節點負載 表中的最少負載的節點進行對比。如果負載差值等于或大于1時,則節點開始將一半的進程移動到負載最小的地區服務器上去。

 G.2 遷移

 

分布式的增加,在系統運行時,使客戶端沒有任何察覺的情況下,角色在從一臺服務器遷徙到另一臺服務器成為可能。下面解釋如何遷移:

 

如圖8所示,一個對象接收到一個將要遷徙到另外一個節點的消息。這個消息通常是由分布式庫 libdist 發送,但也可以通過以下命令從節點手動發送。

 

  1. ProcessId ! {migrate, start_area@server1}.


如圖9所示:在遷徙目標節點,當收到一個遷徙消息時,當前對象進程開始一個帶有相等id和狀態的新進程。新進程id被返回到位于start_area@server2上舊的進程。當一個新進程被創建,他覆蓋了當前在全局注冊表中擁有自己進程id的數據條目,因此所有的消息應該發給他自己。

 

10所描述,這時,即使所有消息仍然發送給舊的進程,舊的進程會轉發給新的進程。

11所示, 如果舊進程一秒鐘之內無法接受新的消息,將殺死自己,我們認為遷移是成功的。

IV 效果

 

用于測試的服務器處理器Phenom(tm) II X4 9408G內存。地區的大小為10000公尺,在一個625公尺的四邊形中,四叉樹將世界拆分成256個四邊形。在測試中,地區里生成了一些機器人對象。機器人大約每7.5秒(5+5秒內隨即)前后移動改變方向。

每個動作更新都要發送給在同一區塊中的其他機器人對象,這就意味著與系統中機器人數量相比,消息數量是呈指數增長的。

 

A  CPU負載

 

12展示了在系統中機器人增長同時所有CPU核心的負載情況。CPU負載呈指數增長,當24000個并發機器人運行時,所有的核心負載都接近了100%

當機器人達到24000時,在一個四邊形區塊中每秒鐘處理1178個消息,在整個地區服務器中,每秒鐘處理了301568個消息。

B 內存負載

 

在圖13中顯示的是鏈接服務器,角色服務器、賬戶服務器和地區服務器的內存負載情況。

24000個并發機器人運行時,地區服務器使用內存619M的時候。其他服務器內存負載基本保持不變,仍然在40-43M之間。

 

 

C 視覺效果

 

當一個客戶端登陸,大約60-80個機器人被做了統計。視覺定時被用來檢查所有明顯視覺延遲。根據不同的負載水平,隨即挑選一些機器人,他們的運動變化在iphone上面同步。6000機器人在地區服務器上時,平均運動變化時間是7.1秒。(我應該估量一下1200024000個機器人時的情況,但在機器人中做了一個日志功能來代替手動計時。)

 

V討論

 

    測試數以千計的客戶端在現實的環境是一個問題,因為很難獲得如此數量的計算機。從同一臺計算機上運行數以千計的客戶端可能會造成瓶頸,不是每個客戶端都有他們自己的計算機。所有的測試計算機都通過同一個局域網內連接,真實的生產環境或許不會是這樣的。當從世界各地通過互聯網連接時,響應時間可能會增加。(我還未測試這些)。在這種情況下,服務器集群的地理位置也會影響到客戶端的響應時間。

 

當游戲的特性數據向進程狀態增加時,地區服務器的內存消耗可能會增加。在測試時,地區服務器的進程中有一個極小的狀態,可以充分的管理角色登陸和遷徙過程。

在沒有檢查探測已經登陸的賬戶或者角色,又或者角色是否屬于賬號的登陸之前,賬號和角色登陸序列是不安全的。(感覺沒翻譯清楚。)

將世界劃分在地區服務器中可能并不是最好的方案。一個更好的方式是做出一個模型:對統一服務器做一個繼承,分支出包含區域/太陽系系統的銀河服務器,同樣區域/太陽系系統包含星球服務器,星球服務器又被劃分成區域服務器。該方法將可以使它通過自上而下的方式更加容易的分發消息。這將使星際旅行甚至從星球表面到它周圍太空的無縫運動變得如此簡單。

 

VI     結論和未來工作

以后再翻譯。

原文件Pdf下載: Next_Generation_MMO_Architecture.zip   

nextgen架構官網:http://www.next-gen.cc

 

由于本人英文水平太爛,本文完全是為學習之用的業余翻譯。希望對大家有用~~  文章難免多處錯誤,歡迎批評指正。

若轉載,請附上原文鏈接:http://blog.chinaunix.net/uid-429659-id-3396370.html

posted on 2016-03-28 09:01 思月行云 閱讀(567) 評論(0)  編輯 收藏 引用 所屬分類: MMO
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一本色道综合亚洲| 亚洲欧美日本另类| 日韩视频在线观看免费| 欧美一区二区三区日韩| 亚洲精品日韩激情在线电影| 香蕉国产精品偷在线观看不卡 | 国产精品第13页| 亚洲精品视频在线观看免费| 蜜臀av在线播放一区二区三区| 亚洲欧洲av一区二区三区久久| 国产精品成av人在线视午夜片 | 99综合视频| 欧美久久视频| 一二三区精品福利视频| 亚洲人在线视频| 欧美1区2区视频| 亚洲精品之草原avav久久| 欧美国产综合| 欧美久久久久久久久久| 一本色道久久综合亚洲精品小说| 最新中文字幕亚洲| 欧美另类专区| 亚洲欧美国产精品va在线观看| 在线亚洲精品| 国产区欧美区日韩区| 久久久噜噜噜久久| 另类综合日韩欧美亚洲| 日韩视频一区二区三区在线播放 | 免费久久久一本精品久久区| 亚洲精品免费观看| 9i看片成人免费高清| 国产欧美日韩在线播放| 免费日本视频一区| 欧美精品三级在线观看| 亚洲一区二区三区午夜| 午夜宅男久久久| 亚洲国产精品99久久久久久久久| 亚洲黄色毛片| 国产精品美女www爽爽爽| 久久综合给合久久狠狠狠97色69| 久久久久久国产精品一区| 亚洲剧情一区二区| 一区二区三区四区五区在线| 国产在线视频不卡二| 91久久国产自产拍夜夜嗨| 国产精品蜜臀在线观看| 你懂的国产精品| 欧美日韩一级视频| 久久深夜福利免费观看| 欧美日本在线| 久久久久一区二区三区| 亚洲小说欧美另类婷婷| 亚洲日本va在线观看| 国产精品高潮呻吟久久av无限 | 性欧美长视频| 免费观看不卡av| 午夜日韩电影| 欧美久久久久免费| 美女网站久久| 国产伦精品一区二区三区视频黑人 | 在线日本高清免费不卡| 一区二区久久| 亚洲国产一区在线| 性视频1819p久久| 中文在线一区| 欧美14一18处毛片| 久久久噜噜噜久噜久久| 欧美色图麻豆| 亚洲国产三级网| 一区二区三区在线高清| 亚洲欧美日韩视频一区| 一区二区三区你懂的| 欧美88av| 模特精品在线| 国自产拍偷拍福利精品免费一| 中文在线资源观看网站视频免费不卡 | 亚洲人成绝费网站色www| 性视频1819p久久| 亚洲欧美变态国产另类| 欧美金8天国| 欧美激情精品久久久久久| 精品88久久久久88久久久| 亚洲欧美日韩一区二区在线| 亚洲一区二区免费在线| 欧美日韩天天操| 亚洲精品日本| 一本色道久久综合精品竹菊| 欧美激情精品久久久久久大尺度 | 亚洲欧美日韩在线观看a三区| 亚洲一区二区在线免费观看| 欧美日产国产成人免费图片| 亚洲福利在线看| 91久久精品日日躁夜夜躁国产| 久久久精品视频成人| 久久久久久综合网天天| 国产一区在线播放| 欧美在线视频a| 久久手机精品视频| 精品二区视频| 欧美成人免费在线视频| 91久久久亚洲精品| 一区二区不卡在线视频 午夜欧美不卡在 | 欧美日韩在线播放一区| 亚洲伦伦在线| 亚洲视频欧洲视频| 国产精品久久999| 亚洲一区二区成人在线观看| 午夜精品久久| 精品99一区二区三区| 久久在精品线影院精品国产| 欧美激情一区二区三级高清视频| 亚洲精品老司机| 国产精品国产三级国产a| 亚洲免费在线精品一区| 久久亚洲不卡| 亚洲精品日本| 国产精品久久久亚洲一区| 香港成人在线视频| 欧美va日韩va| 亚洲午夜精品一区二区三区他趣| 国产精品欧美日韩久久| 久久不射电影网| 亚洲国产精品一区制服丝袜| 亚洲宅男天堂在线观看无病毒| 国产一级揄自揄精品视频| 蜜桃av久久久亚洲精品| 在线视频一区观看| 女生裸体视频一区二区三区| 一区二区三区欧美| 黄色av日韩| 欧美日韩日本视频| 久久激情婷婷| 一区二区三区欧美激情| 欧美va亚洲va日韩∨a综合色| 亚洲欧美欧美一区二区三区| 亚洲国产欧美国产综合一区| 欧美午夜性色大片在线观看| 久久九九国产| 亚洲午夜伦理| 亚洲第一中文字幕| 久久xxxx精品视频| 9i看片成人免费高清| 韩日在线一区| 国产精品理论片| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲婷婷综合久久一本伊一区| 欧美成人国产va精品日本一级| 亚洲免费在线视频| 亚洲黄色尤物视频| 国产一区二区三区免费不卡 | 免费成人av| 性xx色xx综合久久久xx| 日韩一区二区久久| 亚洲电影免费观看高清完整版在线| 欧美在线视频全部完| 日韩一区二区免费看| 在线观看亚洲| 国产乱肥老妇国产一区二| 欧美视频中文一区二区三区在线观看| 毛片一区二区三区| 久久精品国产第一区二区三区| 亚洲午夜91| 一区二区国产精品| 亚洲理论电影网| 亚洲激情第一区| 亚洲电影第1页| 美脚丝袜一区二区三区在线观看| 欧美一区二区三区久久精品茉莉花| 一区二区三区精品国产| 亚洲精品在线视频观看| 亚洲黄色在线视频| 亚洲黄色视屏| 性色一区二区| 亚洲国产精品国自产拍av秋霞| 六月丁香综合| 老司机精品久久| 久久亚洲综合色| 亚洲精品国偷自产在线99热| 国产主播一区| 欧美连裤袜在线视频| 久久一日本道色综合久久| 亚洲小说春色综合另类电影| 亚洲激精日韩激精欧美精品| 欧美高清成人| 乱码第一页成人| 久久亚洲精品一区二区| 久久免费黄色| 免费欧美在线| 亚洲国产一区二区三区在线播| 亚洲国产日韩欧美| 亚洲九九爱视频| 一区二区三区国产盗摄| 亚洲视频在线观看网站| 午夜在线成人av| 久久久久久久久久久久久女国产乱| 久久久久久久综合日本| 乱中年女人伦av一区二区| 欧美激情第五页| 国产精品v一区二区三区 | 亚洲一区二区三区精品在线观看|