精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

順暢的使用C# Actor:另一個解決方案

開發 后端
Actor模型中的對象如果要進行交互,唯一的手段便是發送消息。本文為C# Actor提供了另一個解決方案,但這個方案有著一些致命的缺陷。

在前兩篇文章中,我們了解到Erlang中靈活的模式匹配,以及在C#甚至F#中會都遭遇的尷尬局面。那么現在就應該來設計一個解決方案了,我們如何才能在C#這樣的語言里順暢地使用Actor模型呢?不僅如此,***我們還能獲得其它一些優勢。

C# Actor:“消息”、“協議”和“接口”
Actor模型中的對象如果要進行交互,唯一的手段便是發送消息。不同語言/平臺上的消息有不同的表現形式,但是它們所傳遞的信息是一致的:
◆做什么事情
◆做這件事情需要的數據

例如,Erlang中往往會使用Tag Message的格式作為消息:

  1. {doSomething, Arg1, Arg2, Arg3, ...} 

其中,原子doSomthing表示“做什么”,而后面的ArgN便是一個個的參數,使用Erlang中的模式匹配可以很方便地捕獲消息中的數據。在C#等語言中,由于并非專為了Actor模型設計,因此一個Message往往只能是一個對象。但是這個對象的職責并沒有減輕,因此我們需要自己處理的事情就多了。我們可能會這樣做:

學Erlang的Tag Message,但是這樣會產生大量丑陋的類型轉換操作,并且喪失了靜態檢查功能。
為每種消息創建不同的Message類型,但是這樣會產生大量類類型,每個類型又有各種屬性,非常麻煩。
這兩種做法在上一篇文章里都有過討論,感興趣的朋友可以再去“回味”一番。那么,究竟什么是消息呢?根據我的理解,“消息”其實是這么一種東西:
◆“消息”表示“發送方”和“接受方”之間的“通信協議”(例如Erlang中的“模式”)。
◆“消息”表示“發送方”要“接受方”所做的事情,但是并沒有要求“接受方”需要怎么做。
◆一個Actor可能會會作為“接受方”遵守多種“通信協議”。

經過這樣的描述,您是否覺得.NET中有一種東西和“消息”非常接近?沒錯,那就是“接口”,因為:
◆“接口”從概念上講便是一種“協議”。
◆“接口”表示“能做什么”,但沒有限制“怎么做”。
◆一個Actor可以實現多個接口,即遵守多種協議。

看上去還真是一一對應??!那么我們再來深入一步進行對比,“接口”能否傳遞消息所要表現的信息?答案也是肯定的:
◆做什么事情:接口中的一個方法。
◆需要的數據:接口的參數。

也就是說,如之前的那條Erlang消息,在C#中便可以表示為:

  1. x.DoSomething(arg1, arg2, arg3, ...) 

基于這樣的類比,我們發現使用“接口”還可以帶來一個額外的東西,那就是“消息組”。如Erlang這樣語言,消息與消息之間是完全獨立的。.NET中的接口可以包含多個方法,這就是一種“分組”,我們可以利用這種方式來更好地管理有關聯的消息。此外,利用.NET中的訪問限制符(public,internal等)還可以實現消息的公開和隱藏。而且因為接口的參數是強類型的,所以可以得到編譯期的檢查,也可以享受編輯工具的代碼提示及重構……C#編程里的種種優勢似乎我們一個都沒有拉下。

C# Actor看似美好的實現
等一下,接口只是一種“協議”,但是“消息”還必須是一個實體,一個對象,并且“攜帶”了這個協議才能在Actor之間傳遞埃這個對象除了攜帶協議所需要的數據以外,還要能夠告訴接受方究竟該“操作什么”?!安僮鳌睅稀皵祿?,于是我就想到了“委托”。例如,如果我們想要發送一個“協議”,叫做IDoHandler,那么我們便可以構造一個Action﹤IDoHandler>對象——這正是Lambda表達式的用武之地:

  1. Action﹤IDoHandler> m = x => x.Do(0, 1, 2, ...); 

好,那么我們還是用乒乓測試來嘗試一番。我們知道,乒乓測試會讓Ping對象和Pong對象相互發送消息,我們各使用一個“消息組”,也就是“接口”來定義消息:

  1. public interface IPongMessageHandler { }  
  2.  
  3. public interface IPingMessageHandler { }  

那么,Ping和Pong兩個Actor類型又該如何定義呢?我們知道,Ping需要處理Pong發來的消息,因此它需要實現IPongMessageHandler接口,并且需要接受類型為Action﹤IPongMessageHandler>的消息。Pong與Ping類似,因此它們的定義為:

  1. public class Ping : Actor﹤Action﹤IPongMessageHandler>>, IPongMessageHandler  
  2. {  
  3.     private int m_count;  
  4.  
  5.     public Ping(int count)  
  6.     {  
  7.         this.m_count = count;  
  8.     }  
  9.  
  10.     protected override void Receive(Action﹤IPongMessageHandler> message)  
  11.     {  
  12.         message(this);  
  13.     }  
  14.  
  15.     ...  
  16. }  
  17.  
  18. public class Pong : Actor﹤Action﹤IPingMessageHandler>>, IPingMessageHandler  
  19. {  
  20.     protected override void Receive(Action﹤IPingMessageHandler> message)  
  21.     {  
  22.         message(this);  
  23.     }  
  24.  
  25.     ...  
  26. }  

從代碼上看,實際操作中我們并不需要讓Ping或Pong直接繼承Handler接口,只要最終提供一個對象給message執行即可。嚴格說來,“接口”只是一個“消息組”,具體的“消息”還是要落實到接口中的方法。定義了Ping和Pong之后,我們便可以明確接口中的方法了(確切地說,是明確了方法的參數):

  1. public interface IPongMessageHandler  
  2. {  
  3.     void Pong(Pong pong);  
  4. }  
  5.  
  6. public interface IPingMessageHandler  
  7. {  
  8.     void Ping(Ping ping);  
  9.     void Finish();  
  10. }  

使用了接口,自然就要提供方法的實現了。我們先從典型而簡單的Pong對象看起:

  1. public class Pong : Actor﹤Action﹤IPingMessageHandler>>, IPingMessageHandler  
  2. {  
  3.     ...  
  4.  
  5.     #region IPingMessageHandler Members  
  6.  
  7.     void IPingMessageHandler.Ping(Ping ping)  
  8.     {  
  9.         Console.WriteLine("Pong received ping");  
  10.         ping.Post(h => h.Pong(this));  
  11.     }  
  12.  
  13.     void IPingMessageHandler.Finish()  
  14.     {  
  15.         Console.WriteLine("Finished");  
  16.         this.Exit();  
  17.     }  
  18.  
  19.     #endregion  
  20. }  

原本需要在得到消息之后,根據消息的內容作出不同的響應。而現在,消息會被自動轉發為接口中的方法調用,我們只需要實現特定的方法即可。在Ping方法中,我們會得到一個Ping類型的對象——于是我們再向它回復一個消息。消息的類型是Action﹤IPongMessageHandler>,可以看出,使用Lambda表達式構造這樣一個消息特別方便。

Ping類也只需要實現IPongMessageHandler即可,只是這段邏輯“略顯復雜”:

  1. public class Ping : Actor﹤Action﹤IPongMessageHandler>>, IPongMessageHandler  
  2. {  
  3.     ...  
  4.  
  5.     public void Start(Pong pong)  
  6.     {  
  7.         pong.Post(h => h.Ping(this));  
  8.     }  
  9.  
  10.     #region IPongMessageHandler Members  
  11.  
  12.     void IPongMessageHandler.Pong(Pong pong)  
  13.     {  
  14.         Console.WriteLine("Ping received pong");  
  15.  
  16.         if (--this.m_count > 0)  
  17.         {  
  18.             pong.Post(h => h.Ping(this));  
  19.         }  
  20.         else 
  21.         {  
  22.             pong.Post(h => h.Finish());  
  23.             this.Exit();  
  24.         }  
  25.     }  
  26.  
  27.     #endregion  
  28. }  

收到Pong消息之后,將count減1,如果還大于0,則回復一個Ping消息,否則就回復一個Finish并退出。***啟動乒乓測試:

new Ping(5).Start(new Pong());由于使用了接口作為消息的協議,因此無論是編輯器還是編譯器都可以給我們足夠的支持。同時,對于消息的處理也無須如上一篇文章那樣不斷進行判斷和類型轉換,代碼可謂流暢不少。

C# Actor致命的缺陷
雖說沒有***的東西,但目前的缺陷卻是致命的。

在實際使用過程中,消息的“發送方”和消息的“接收方”應該完全無關,它們互不知道對方具體是誰,只應該基于“協議”,也就是“接口”來實現??上г谏厦孢@段代碼中,很多東西都被“強橫”地限制住了。例如,Ping消息會附帶一個ping對象作為參數,ping對象會等待一個Pong消息。但是,發送Ping消息(并等待Pong消息)的一方很可能是各種類型的Actor,不一定是Ping類型。有朋友可能會說,那么我們把IPingMessageHandler的Ping方法的簽名改成這樣,不就可以了嗎?

  1. void Ping(Actor﹤Action﹤IPongMessageHandler>> ping) 

是的,此時的ping,的確是在“等待Pong消息的Actor對象”。但是,這意味著ping對象它也只能是這個指明的Actor類型了。在實際使用過程中,這幾乎是不可能的事情。因為一個Actor很可能會接受各種消息,它很難做到“一心一意”。因此這篇文章所提出的做法,幾乎只能滿足如乒乓測試這樣簡單的Actor模型使用場景。我們必須改變。

改變的方式有不少,從“向弱類型妥協”到“利用.NET 4.0中的協變/逆變”,都可以滿足不同的場景——不過我們還是下次再說吧。

F#的實現
本文描述的方式也可以運用在在F#中。首先自然還是接口的定義:

  1. type IPingMessageHandler =  
  2.     abstract Ping : Ping -> unit  
  3.     abstract Finish : unit -> unit  
  4.  
  5. and IPongMessageHandler =   
  6.     abstract Pong : Pong -> unit  

以上便是F#中定義接口的方式,與C#相比更為簡潔。接著便是Ping類型的實現:

  1. and Ping() =  
  2.     inherit (IPongMessageHandler -> unit) Actor()  
  3.     let mutable count = 5  
  4.     override self.Receive(message) = message self  
  5.  
  6.     member self.Start(pong : Pong) =   
  7.         pong ﹤﹤ fun h -> self |> h.Ping  
  8.       
  9.     interface IPongMessageHandler with   
  10.         member self.Pong(pong) =  
  11.             printfn "Ping received pong" 
  12.             count ﹤- count - 1  
  13.             if (count > 0) then  
  14.                 pong ﹤﹤ fun h -> self |> h.Ping  
  15.             else 
  16.                 pong ﹤﹤ fun h -> h.Finish()  
  17.                 self.Exit()Pong類型的實現則更為簡單:  
  18.  
  19. and Pong() =  
  20.     inherit (IPingMessageHandler -> unit) Actor()  
  21.     override self.Receive(message) = message self  
  22.       
  23.     interface IPingMessageHandler with  
  24.         member self.Ping(ping) =  
  25.             printfn "Pong received ping" 
  26.             ping ﹤﹤ fun h -> self |> h.Pong  
  27.           
  28.         member self.Finish() =  
  29.             printfn "Finished" 
  30.             self.Exit()啟動乒乓測試:  
  31.  
  32. (new Pong()) |> (new Ping()).Start;  
  33.  

【編輯推薦】

  1. C# Actor的尷尬與F#美麗外表下的遺憾
  2. 看Erlang中Actor模型的執行方式和優劣
  3. Erlang面向分布與并發的編程語言
  4. Erlang十分鐘快速入門
  5. 因并發而生 因云計算而熱:Erlang專家訪談實錄
責任編輯:yangsai 來源: 老趙點滴
相關推薦

2009-08-14 00:55:21

C#程序編譯

2016-12-26 15:23:21

戴爾

2009-08-26 18:17:26

C#基于Object解

2011-03-28 14:02:07

MirahJava對手

2012-01-12 10:09:55

Elementary 思路

2012-03-21 11:10:00

JDBCMySQLJava

2009-03-17 09:27:52

ITSMITIL解決方案

2018-11-05 11:06:38

openmediavaNAS 方案

2011-11-10 09:46:41

云計算云管理

2023-02-10 15:41:50

物聯網物聯網平臺

2009-07-28 11:37:55

7類布線端口

2019-07-08 10:01:33

物聯網IOT技術

2010-11-30 16:50:42

2024-01-15 00:35:23

JavaScript框架HTML

2021-05-29 07:13:26

微軟Nobelium網絡攻擊

2018-12-05 09:00:46

DevOps持續交付持續集成

2021-06-16 12:03:49

WindowsLinux游戲

2010-08-05 10:05:14

C#枚舉值

2012-03-02 09:22:11

程序員

2011-11-15 10:16:04

Linux操作系統
點贊
收藏

51CTO技術棧公眾號

国产精品视频免费看| 欧美不卡一区| 欧美日韩一二区| 青青草视频国产| 午夜视频免费在线| 久久精品久久综合| 午夜精品久久久久久久久久久久 | 国产在线视频在线观看| 最新亚洲精品| 欧美成人精品3d动漫h| 国产成人久久777777| 最新国产在线拍揄自揄视频| 91在线视频观看| 91亚洲精品在线| 国产一区免费看| 亚洲黄页一区| 久久这里有精品视频| 国产精品高清无码在线观看| 欧美1区2区3| 欧美三级乱人伦电影| 欧美日韩亚洲一| 女人天堂av在线播放| 中文字幕不卡在线观看| 精品网站在线看| www.国产三级| 久久精品国产**网站演员| 欧美一级片在线播放| 久久久91视频| 99久久亚洲精品蜜臀| 亚洲人成网站777色婷婷| 亚洲成年人av| 久久综合给合| 欧美高清激情brazzers| 五月天亚洲视频| 深夜成人影院| 欧美网站在线观看| 人人干视频在线| 亚洲七七久久综合桃花剧情介绍| 国产精品免费久久| 免费成人深夜夜行视频| 五月天福利视频| 成人三级伦理片| 成人xxxxx色| 性一交一乱一精一晶| 极品美女销魂一区二区三区免费| 国产精品久久91| www.com亚洲| 久久亚洲欧美| 日韩av免费在线| 中文人妻av久久人妻18| 视频在线在亚洲| 国产精品白丝jk喷水视频一区 | 亚洲在线网站| 国产91精品久久久久久| www.国产高清| 噜噜噜躁狠狠躁狠狠精品视频| 午夜精品一区二区三区在线播放 | 欧美一区二区三区在线观看免费| 欧美国产精品中文字幕| 亚洲成人一区二区三区| 日本在线www| 亚洲视频一区二区在线观看| 日韩精品福利片午夜免费观看| 成人av黄色| 一区二区三区av电影| 成人在线播放网址| 涩涩视频网站在线观看| 91激情五月电影| 污视频网址在线观看| 秋霞一区二区| 日韩av在线导航| 在线观看亚洲大片短视频| 99久久精品费精品国产| 欧美日本黄视频| 在线观看国产亚洲| 全部av―极品视觉盛宴亚洲| 91九色国产视频| 狠狠躁夜夜躁av无码中文幕| 久久综合久久鬼色中文字| 亚洲国产精品123| 久久国产精品一区| 亚洲h动漫在线| 免费看a级黄色片| 嫩草伊人久久精品少妇av杨幂| 欧美日韩dvd在线观看| 可以看的av网址| 一区二区三区欧洲区| 亚洲欧美在线免费观看| 成年人二级毛片| 亚洲深夜激情| 成人羞羞国产免费| 亚洲av激情无码专区在线播放| 国产欧美一区视频| 伊人再见免费在线观看高清版| 欧亚av在线| 欧美一区二区精品| 小早川怜子久久精品中文字幕| 99精品视频在线| 人人澡人人澡人人看欧美| 国产成人久久精品77777综合| 91在线观看一区二区| mm131午夜| 在线看欧美视频| 亚洲成人av中文字幕| 中文字幕求饶的少妇| 国产视频欧美| 2019国产精品视频| 亚洲成人三级| 色欧美日韩亚洲| 香蕉视频污视频| 亚洲成人99| 国产精品久久久| 亚洲 欧美 自拍偷拍| 亚洲欧美日韩国产一区二区三区| 国产a视频免费观看| 99国产精品免费网站| 日韩有码在线播放| 天天综合久久综合| 91在线视频免费91| 可以看毛片的网址| 国产一区二区久久久久| 在线观看精品国产视频| 六月丁香激情综合| www.在线欧美| 日韩黄色片在线| 欧美成人精品一级| 久久精品视频免费播放| 中文字幕a级片| 国产日韩一级二级三级| 日韩av片在线看| 欧美毛片免费观看| 国模极品一区二区三区| 高清毛片aaaaaaaaa片| 一区二区三区四区五区视频在线观看 | 久久人人精品| 免费国产一区二区| 色戒汤唯在线| 亚洲美女www午夜| 91精品国产综合久久久蜜臀九色| 成人国产精品免费网站| 日韩小视频网站| 成人爽a毛片免费啪啪红桃视频| 久久伊人精品视频| av免费在线不卡| 亚洲激情男女视频| 日本在线视频播放| 欧美私人啪啪vps| 国产精品视频入口| 国产乱码精品一区二三赶尸艳谈| 亚洲国产精品视频在线观看| 国产一二三四在线| 波多野结衣中文一区| 精品视频免费在线播放| 婷婷亚洲成人| 国产福利视频一区二区| 成年午夜在线| 欧美高清视频www夜色资源网| 波多野结衣家庭教师| 成人夜色视频网站在线观看| 精品人妻少妇一区二区| 亚洲第一二三区| 国产精品麻豆va在线播放| 欧美成人hd| 精品国产不卡一区二区三区| 男女视频免费看| 欧美激情资源网| 亚洲久久中文字幕| 欧美88av| 久久精品国产精品青草色艺| 色天使综合视频| 久久在线免费观看视频| 欧美一级性视频| 91久久久免费一区二区| 91免费公开视频| 成人av在线观| 午夜激情在线观看视频| 亚洲精品电影| 就去色蜜桃综合| 久久99国产精品二区高清软件| 蜜臀久久99精品久久久无需会员 | 性欧美xxxx视频在线观看| 久热av在线| 日韩无一区二区| 久久久成人免费视频| 中文字幕一区日韩精品欧美| 亚洲视频天天射| 视频一区在线视频| 999久久欧美人妻一区二区| 在线视频亚洲专区| 亚洲在线视频福利| 高清av不卡| 欧美激情videos| sese在线视频| 亚洲精品理论电影| 国产又粗又猛又爽又黄的视频一| 亚洲超碰精品一区二区| 精品手机在线视频| 97精品久久久久中文字幕| 天天爽人人爽夜夜爽| 在线成人av| 在线视频福利一区| 亚洲制服欧美另类| 99国精产品一二二线| 国产精成人品2018| 45www国产精品网站| a视频在线播放| 在线观看精品国产视频| 日韩a在线观看| 精品久久五月天| 国产精品色综合| 91福利国产精品| 日韩 欧美 综合| 樱桃国产成人精品视频| 成人无码精品1区2区3区免费看 | 精品国产成人系列| 99精品久久久久久中文字幕| 91福利小视频| 国产又大又黄视频| 亚洲成在人线在线播放| 免费在线观看一级片| 中文字幕 久热精品 视频在线 | 成人乱码一区二区三区| 91精品国产综合久久久久久久| 无码人妻精品一区二区三区9厂| 午夜欧美在线一二页| 久久久无码精品亚洲国产| 自拍av一区二区三区| 日本污视频网站| 久久精品视频在线看| 欧美黑人欧美精品刺激| 成人看片黄a免费看在线| 国产又黄又嫩又滑又白| 国产一区二区免费视频| 中文字幕一区二区在线观看视频| 蜜臀av性久久久久蜜臀aⅴ | 久久久国内精品| 欧美va天堂在线| 国内少妇毛片视频| 精品9999| 日本丰满少妇xxxx| 99精品免费| 动漫av网站免费观看| 美女黄网久久| 亚洲乱码中文字幕久久孕妇黑人| 99国产精品久久久久久久成人热| 无码粉嫩虎白一线天在线观看 | 日韩在线一区二区三区四区| 精品国产一区二区三区久久久蜜月| 国产a级免费视频| 欧美xxxx老人做受| 日韩一级免费视频| 亚洲精品久久在线| 国产无套粉嫩白浆在线2022年| 亚洲人成网站777色婷婷| 成全电影播放在线观看国语| 日韩一二三在线视频播| 麻豆av在线导航| 久久99亚洲精品| 三级在线观看视频| 国产成人激情小视频| 国产精品xxxav免费视频| 97国产超碰| 国产精品1luya在线播放| 操人视频欧美| 久久大胆人体视频| 欧美亚洲另类在线一区二区三区| 国产欧美日韩精品一区二区免费 | 亚洲h在线观看| 亚洲视频 欧美视频| 欧美性受xxxx黑人xyx性爽| 国产精品亚洲lv粉色| 精品成人一区二区三区| 男人久久精品| 日韩视频免费中文字幕| 国产蜜臀在线| 国产精品精品视频一区二区三区| 91麻豆精品| 国产一区二区在线网站| 国产精品美女久久久久久不卡| 中日韩在线视频| 亚洲国产精品第一区二区三区| 欧美成人黑人猛交| 国产精品中文欧美| 无码人妻精品一区二区三区温州| 国产精品嫩草99a| 久久艹免费视频| 欧美日韩精品三区| 五月天丁香视频| 久久久999精品免费| 这里有精品可以观看| 91精品久久久久久久久中文字幕| 激情视频极品美女日韩| 亚洲精品视频一二三| 亚洲国产99| 中文字幕 欧美日韩| 91原创在线视频| 美女的奶胸大爽爽大片| 在线亚洲高清视频| 人妻一区二区三区| 少妇高潮 亚洲精品| 涩涩av在线| av一区观看| 视频在线不卡免费观看| 男人日女人下面视频| 国产一二精品视频| 少妇精品无码一区二区免费视频| 亚洲成a人片综合在线| 亚洲一区二区三区高清视频| 日韩av在线网站| 四季久久免费一区二区三区四区| 国产精品久久久| 亚洲系列另类av| a天堂资源在线观看| 久久丁香综合五月国产三级网站 | 亚洲欧洲日韩一区二区三区| 在线观看亚洲天堂| 精品不卡在线视频| 色黄网站在线观看| 91热福利电影| 99久久.com| 色噜噜狠狠永久免费| 国产日韩欧美高清在线| 欧美a∨亚洲欧美亚洲| 精品国产免费视频| 自由的xxxx在线视频| 91精品久久久久久久久不口人| 国产探花一区在线观看| 国产97在线 | 亚洲| 成人高清伦理免费影院在线观看| 欧美国产日韩综合| 日韩一区二区三| www在线免费观看视频| 国产精品主播视频| 凹凸成人精品亚洲精品密奴| 无码内射中文字幕岛国片| xnxx国产精品| 欧美日韩乱国产| 亚洲国内精品在线| 国产美女高潮在线观看| 好吊妞www.84com只有这里才有精品| 激情视频一区二区三区| 逼特逼视频在线观看| 亚洲成人动漫在线观看| 日韩一卡二卡在线| 欧美亚洲日本黄色| 自拍视频一区| 黑森林精品导航| 国产精品久久久久久一区二区三区| 中文字幕在线网址| 久久精品国产亚洲精品| 精品国产鲁一鲁****| 日本香蕉视频在线观看| aaa国产一区| 综合网在线观看| 在线播放日韩精品| 亚洲欧美一级| 奇米777四色影视在线看| 国v精品久久久网| 欧美激情黑白配| 伊人亚洲福利一区二区三区| 性欧美video另类hd尤物| 黄色一级视频播放| 大桥未久av一区二区三区中文| 日本韩国欧美中文字幕| 国产午夜精品视频免费不卡69堂| 国外成人福利视频| 日本在线视频www色| 成人美女在线观看| 久久精品视频2| 大量国产精品视频| 外国成人在线视频| 久久久久久蜜桃一区二区| 一区二区三区视频在线看| 婷婷久久久久久| 国产精品日韩专区| 亚洲国产mv| 欧美黄色高清视频| 欧美mv和日韩mv的网站| 欧美极度另类| 伊人再见免费在线观看高清版 | 亚洲少妇激情视频| 国产精品日本一区二区三区在线| 成人午夜精品久久久久久久蜜臀| 久久精品在线免费观看| a视频免费在线观看| 欧美重口另类videos人妖| 久久精品亚洲人成影院 | 香蕉视频一区二区三区| 亚洲黄色av片| 欧美性猛交99久久久久99按摩| 黄色网在线播放| 蜜桃传媒视频麻豆第一区免费观看| 麻豆精品蜜桃视频网站| 国产精品免费av一区二区| www.日韩视频| 免费视频一区三区| 欧美色图校园春色| 欧美优质美女网站| 波多野结衣视频一区二区| 一区二区三区四区国产|