精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

精品久久人妻av中文字幕| aaaaaav| 羞羞网站在线看| 北条麻妃一区二区三区| 日本一区二区三区在线播放| 亚洲精品天堂网| 成人看片爽爽爽| 在线免费观看日韩欧美| 老司机激情视频| 你懂的视频在线观看| 经典三级在线一区| 2019中文字幕在线免费观看| 中文字幕在线2021| 国产精品亚洲人成在99www| 欧美一区二区人人喊爽| www.四虎成人| 日本在线视频www鲁啊鲁| 久久久不卡影院| 国产精品久久亚洲7777| 一级做a爱片久久毛片| 亚洲一区成人| 欧美日韩国产成人在线| 亚洲激情图片网| 九一亚洲精品| 亚洲第一福利在线观看| 午夜av中文字幕| jizz免费一区二区三区| 懂色av影视一区二区三区| 成年人视频大全| 中文字幕日本在线| 国产午夜一区二区三区| 韩日午夜在线资源一区二区| 性做久久久久久久| 黄色精品一二区| 国产欧美日韩91| 久久久久久久久久一级| 久久精品卡一| 日韩av免费在线观看| 久久久久久久久影院| 激情自拍一区| 精品自在线视频| 久热这里有精品| 亚洲欧美综合久久久| 久久精品电影网| 日本成人精品视频| 国产亚洲一区二区三区啪| 亚洲男人av在线| 丰满少妇一区二区| 九九在线高清精品视频| 亚洲天堂色网站| 色哟哟精品观看| 国产九一精品| 国产香蕉97碰碰久久人人| 亚洲精品成人无码| 免费av一区| 国产一区二区三区视频 | 久久国产乱子伦精品| 性色一区二区三区| 日本一区二区在线播放| 看黄色一级大片| 蜜桃av一区二区| 成人免费看黄网站| 国产黄a三级三级三级| 国产成人综合网站| 国产一区二区免费电影| 亚洲人视频在线观看| 久久蜜桃一区二区| 亚洲国产一区二区三区在线播 | 黄色片一级视频| 日韩精品免费观看视频| 欧美精品在线一区二区| 中文字幕第66页| 黄色欧美在线| 亚洲天堂av在线播放| 亚洲一级片在线播放| 中文字幕乱码亚洲无线精品一区| 欧美高跟鞋交xxxxhd| 久久精品欧美一区二区| 亚洲免费在线| 国产美女直播视频一区| 午夜精品在线播放| 91一区二区三区在线观看| 无遮挡亚洲一区| 国内外激情在线| 亚洲成人在线观看视频| 欧美两根一起进3p做受视频| 中文字幕综合| 亚洲二区中文字幕| 少妇愉情理伦三级| 国内视频精品| 国产精品99导航| 99视频免费看| 久久久国产精品麻豆| 桥本有菜av在线| 国产黄大片在线观看| 欧美三区免费完整视频在线观看| 国产精品99精品无码视亚| 女厕嘘嘘一区二区在线播放| 久久精品青青大伊人av| 国产免费观看av| 韩国一区二区视频| 久久精品日产第一区二区三区| 求av网址在线观看| 欧美日韩国产色视频| 网站在线你懂的| 亚洲动漫精品| 欧美激情一区二区三区久久久| 五月天激情四射| 国产精品18久久久久久vr| 欧美二区三区在线| 黑人极品ⅴideos精品欧美棵| 欧洲精品中文字幕| 中文字幕 亚洲一区| 亚洲综合激情在线| 国产精品99蜜臀久久不卡二区| 丰满人妻熟女aⅴ一区| 国产精品高清亚洲| 国产一区亚洲二区三区| 国产成人tv| 欧美成人免费大片| 国产亚洲久一区二区| 99re66热这里只有精品3直播 | 好了av在线| 欧美视频在线观看一区二区| 亚洲天堂成人av| 雨宫琴音一区二区在线| 99在线高清视频在线播放| 阿v免费在线观看| 欧美日韩综合视频网址| 色哟哟视频在线| 欧美精品国产一区二区| 亚洲一区二区久久久久久| 欧美尤物美女在线| 欧美性受极品xxxx喷水| 精品人伦一区二区三电影| 亚洲一区二区毛片| 老司机精品福利在线观看| 国产网红在线观看| 日韩欧美123| 草视频在线观看| 国产精品亚洲一区二区三区妖精 | 亚洲高清激情| 国产91免费视频| 国产美女情趣调教h一区二区| 欧美一区二区三区不卡| 日韩va亚洲va欧美va清高| 麻豆精品国产91久久久久久 | 一区福利视频| 99视频在线| 18aaaa精品欧美大片h| 亚洲精品一区二区三区香蕉| 精品在线视频免费| 不卡的看片网站| 高清在线观看免费| 九九综合九九| 国产精自产拍久久久久久| 午夜在线视频播放| 91精品免费在线| 精品少妇theporn| 99re成人精品视频| 天堂中文视频在线| 婷婷丁香综合| 国产精品麻豆免费版| 中文在线а√在线8| 国产亚洲精品美女| 亚洲一线在线观看| 亚洲欧美日韩中文字幕一区二区三区 | 欧美第一页在线观看| 国产精品一区二区男女羞羞无遮挡 | 亚洲乱亚洲高清| 欧美日韩免费观看一区| 成人激情视屏| 欧美成人在线免费| 性xxxx视频| 欧美日韩免费一区二区三区| 成人在线观看小视频| av在线不卡免费看| 欧美日韩亚洲自拍| 国产精品99免费看| 蜜桃视频在线观看91| 欧美123区| 欧美第一页在线| 青青操视频在线| 欧美精品色一区二区三区| 久久婷婷国产麻豆91| 久久免费美女视频| 91蝌蚪视频在线| 国产精品日韩精品欧美精品| 亚洲精品9999| 精品网站aaa| 国产精品自拍偷拍视频| ****av在线网毛片| 日韩有码在线播放| 亚洲三区在线播放| 91麻豆精品国产91久久久更新时间| 日本亚洲色大成网站www久久| 中文文精品字幕一区二区| 欧美日韩一区二区区| 性色av一区二区怡红| av中文字幕av| 国产中文精品久高清在线不| 成人xxxxx色| 国产a亚洲精品| 91成人福利在线| av免费网站在线观看| 亚洲天堂成人在线| 成人毛片视频免费看| 欧美人伦禁忌dvd放荡欲情| 日本三级一区二区| 亚洲欧美国产77777| 国产免费无遮挡吸奶头视频| 东方欧美亚洲色图在线| 亚洲一级片av| 日本不卡不码高清免费观看| 波多野结衣综合网| 91精品国产自产拍在线观看蜜| 欧洲一区二区在线| 麻豆一区二区麻豆免费观看| **亚洲第一综合导航网站| 性欧美freehd18| 欧美中文在线字幕| 草草在线视频| 久久久久久久久久久免费| 黄色网页在线看| 在线成人一区二区| 户外极限露出调教在线视频| 亚洲精品久久在线| www.五月天激情| 3atv一区二区三区| 一卡二卡三卡在线| 欧美视频在线观看一区| 亚洲中文字幕无码爆乳av| 欧美日韩美女视频| 日韩视频免费观看高清| 亚洲第一福利一区| 久久久久成人精品无码| 一区二区三区产品免费精品久久75| 国产喷水在线观看| 国产精品伦理在线| 1024手机在线观看你懂的| 久久久精品一品道一区| 3d动漫精品啪啪一区二区下载| 99这里都是精品| 久久久久麻豆v国产精华液好用吗| 成人性生交大片免费看中文 | 又污又黄的网站| 欧美亚洲动漫另类| 中文字幕精品一区二| 欧美调教femdomvk| 中文字幕av影视| 欧美日韩一区在线观看| 97人妻一区二区精品免费视频| 91精品国产入口| 精品国产区一区二| 欧美变态tickle挠乳网站| 日本高清视频免费观看| 日韩国产中文字幕| 黄色美女网站在线观看| 日韩在线观看免费高清| 国产黄a三级三级三级av在线看| 久久亚洲私人国产精品va| 在线午夜影院| 97国产真实伦对白精彩视频8| 午夜影院一区| 国产精品美女无圣光视频| 欧美videos粗暴| 91久久精品一区二区别| av综合网址| 欧美日韩综合久久| 欧美a级片视频| 欧美性猛交内射兽交老熟妇| 宅男噜噜噜66国产日韩在线观看| 欧在线一二三四区| 老司机免费视频一区二区| 在线成人精品视频| 2022国产精品视频| 色偷偷www8888| 亚洲成a人片在线观看中文| youjizz在线视频| 欧美久久婷婷综合色| 欧美熟女一区二区| 亚洲小视频在线| 18在线观看的| 日韩av片免费在线观看| 国产精品麻豆| 欧美一区二区在线| 综合日韩在线| 国产精品无码专区av在线播放| 国产在线国偷精品产拍免费yy | 欧美色资源站| 中文字幕一区二区三区四区五区六区 | 国产精品天天看| 久草网视频在线观看| 日本二三区不卡| 亚洲第一精品网站| 在线日韩av观看| 成年人国产在线观看| 国产精品网址在线| 精品国产午夜肉伦伦影院| 亚洲精品国产精品国自产| 亚洲国产mv| 亚洲图片 自拍偷拍| 久久精品视频在线看| 久久久久久久久97| 欧美人xxxx| 国产女人在线视频| 91精品国产一区| 狂野欧美xxxx韩国少妇| 亚洲v欧美v另类v综合v日韩v| 亚洲黄色影片| 亚洲精品乱码久久久久久9色| 中文在线一区二区| 潘金莲一级淫片aaaaaa播放| 精品久久国产字幕高潮| av播放在线观看| 欧洲永久精品大片ww免费漫画| 一区二区在线免费播放| 日本不卡一区二区三区四区| 日韩二区三区四区| 香港三日本8a三级少妇三级99| 一区二区三区免费网站| 一二三区在线播放| 一区二区三区国产视频| 超级碰碰久久| 精品蜜桃一区二区三区| 黄色av日韩| 91精品国产高清91久久久久久| 综合色天天鬼久久鬼色| 国产女优在线播放| 亚洲日韩中文字幕| 亚洲人成午夜免电影费观看| 精品国产二区在线| 亚洲国产一区二区三区高清| 日本xxxx免费| 亚洲最大色网站| 亚洲av无码一区二区三区性色| 久久精品国产96久久久香蕉| 日韩电影精品| 伊人精品久久久久7777| 美女看a上一区| 高清国产在线观看| 欧美视频在线一区| 日本在线观看网站| 91在线观看免费网站| 午夜激情久久| 精品人妻一区二区三| 亚洲精品一二三区| 亚洲av无码国产精品永久一区| 九九热精品在线| 中文字幕日韩在线| 无码 制服 丝袜 国产 另类| 成av人片一区二区| 色婷婷av国产精品| 亚洲欧美国产精品专区久久| 欧美日韩视频免费观看| 色涩成人影视在线播放| 久久精品国产第一区二区三区| 精品国产大片大片大片| 欧美一级精品大片| 成人高潮aa毛片免费| 免费h精品视频在线播放| 日韩国产成人精品| 日本免费网站视频| 精品成a人在线观看| 性xxxxfreexxxxx欧美丶| 神马影院午夜我不卡| 狠狠色丁香婷综合久久| 九九热精彩视频| 精品亚洲一区二区三区在线观看| 日韩免费电影| 国产大尺度在线观看| 99久久免费国产| 欧美性受xxx黑人xyx性爽| 欧美成人免费小视频| 欧美天堂社区| 欧美一级xxxx| 午夜精品在线看| 岛国最新视频免费在线观看| 91在线视频一区| 国产欧美精品| 三级黄色在线观看| 亚洲国产日韩精品在线| 久久69成人| 黄色片网址在线观看| 欧美国产精品一区二区三区| 精品久久无码中文字幕| 国产成人精品一区二区| 中文精品电影| 日韩av片在线| 亚洲精品在线观看网站| 色猫猫成人app| 日本中文字幕在线视频观看| 欧美激情一区在线观看| 人妻妺妺窝人体色www聚色窝| 国产精品夜间视频香蕉| 亚洲人成毛片在线播放女女| 人妻无码一区二区三区免费| 日韩精品久久久久久久玫瑰园 | 欧美男女性生活在线直播观看| 国产伦理精品|