成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識(shí)庫 > Asp.net SignalR快速入門

Asp.net SignalR快速入門

熱門標(biāo)簽:地圖標(biāo)注專業(yè)團(tuán)隊(duì) 遂寧市地圖標(biāo)注app 地圖標(biāo)注的公司有哪些 塔城代理外呼系統(tǒng) 天心智能電銷機(jī)器人 代理接電話機(jī)器人如何取消 地圖定位圖標(biāo)標(biāo)注 濮陽外呼電銷系統(tǒng)怎么樣 400電話辦理哪家性價(jià)比高

今天的專題就是讓大家可以快速的上手Asp.net SignalR。廢話不多說了,下面正式進(jìn)入今天專題的內(nèi)容。

二、Asp.net SignalR 是個(gè)什么東東
   Asp.net SignalR是微軟為實(shí)現(xiàn)實(shí)時(shí)通信的一個(gè)類庫。一般情況下,SignalR會(huì)使用JavaScript的長輪詢(long polling)的方式來實(shí)現(xiàn)客戶端和服務(wù)器通信,隨著Html5中WebSockets出現(xiàn),SignalR也支持WebSockets通信。另外SignalR開發(fā)的程序不僅僅限制于宿主在IIS中,也可以宿主在任何應(yīng)用程序,包括控制臺(tái),客戶端程序和Windows服務(wù)等,另外還支持Mono,這意味著它可以實(shí)現(xiàn)跨平臺(tái)部署在Linux環(huán)境下。

  SignalR內(nèi)部有兩類對(duì)象:

Http持久連接(Persisten Connection)對(duì)象:用來解決長時(shí)間連接的功能。還可以由客戶端主動(dòng)向服務(wù)器要求數(shù)據(jù),而服務(wù)器端不需要實(shí)現(xiàn)太多細(xì)節(jié),只需要處理PersistentConnection 內(nèi)所提供的五個(gè)事件:OnConnected, OnReconnected, OnReceived, OnError 和 OnDisconnect 即可。
Hub(集線器)對(duì)象:用來解決實(shí)時(shí)(realtime)信息交換的功能,服務(wù)端可以利用URL來注冊一個(gè)或多個(gè)Hub,只要連接到這個(gè)Hub,就能與所有的客戶端共享發(fā)送到服務(wù)器上的信息,同時(shí)服務(wù)端可以調(diào)用客戶端的腳本。
  SignalR將整個(gè)信息的交換封裝起來,客戶端和服務(wù)器都是使用JSON來溝通的,在服務(wù)端聲明的所有Hub信息,都會(huì)生成JavaScript輸出到客戶端,.NET則依賴Proxy來生成代理對(duì)象,而Proxy的內(nèi)部則是將JSON轉(zhuǎn)換成對(duì)象。

  客戶端和服務(wù)端的具體交互情況如下圖所示:

  從上面的介紹可以看出,SignalR既然是為實(shí)時(shí)而生的,這樣就決定了其使用場所。具體適用情景有如下幾點(diǎn):

1、聊天室,如在線客服系統(tǒng),IM系統(tǒng)等
2、股票價(jià)格實(shí)時(shí)更新
3、消息的推送服務(wù)
4、游戲中人物位置的實(shí)時(shí)推送
   目前,我所在公司在開發(fā)的就是在線客服系統(tǒng)。

三、使用Asp.net SignalR在Web端實(shí)現(xiàn)廣播消息
   通過第二部分的介紹,相信大家對(duì)Asp.net SignalR有了一個(gè)初步的了解,接下來通過兩個(gè)例子來讓大家加深對(duì)SignalR運(yùn)行機(jī)制的理解。第一個(gè)例子就是在Web端如何使用SignalR來實(shí)現(xiàn)廣播消息。

使用Visual Studio 2013,創(chuàng)建一個(gè)MVC工程
通過Nuget安裝SignalR包。右鍵引用-》選擇管理Nuget程序包-》在出現(xiàn)的窗口中輸入SignalR來找到SignalR包進(jìn)行安裝。
安裝SignalR成功后,SignalR庫的腳本將被添加進(jìn)Scripts文件夾下。具體如下圖所示:


4. 向項(xiàng)目中添加一個(gè)SignalR集線器(v2)并命名為ServerHub。

  5. 將下面代碼填充到剛剛創(chuàng)建的ServerHub類中。

using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;
using System;

namespace SignalRQuickStart
{public class ServerHub : Hub
  {
    private static readonly char[] Constant =
    {
      '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
      'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
      'w', 'x', 'y', 'z',
      'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
      'W', 'X', 'Y', 'Z'
    };

    /// summary>
    /// 供客戶端調(diào)用的服務(wù)器端代碼
    /// /summary>
    /// param name="message">/param>
    public void Send(string message)
    {
      var name = GenerateRandomName(4);

      // 調(diào)用所有客戶端的sendMessage方法
      Clients.All.sendMessage(name, message);
    }

    /// summary>
    /// 產(chǎn)生隨機(jī)用戶名函數(shù)
    /// /summary>
    /// param name="length">用戶名長度/param>
    /// returns>/returns>
    public static string GenerateRandomName(int length)
    {
      var newRandom = new System.Text.StringBuilder(62);
      var rd = new Random();
      for (var i = 0; i  length; i++)
      {
        newRandom.Append(Constant[rd.Next(62)]);
      }
      return newRandom.ToString();
    }
  }
}

  6. 創(chuàng)建一個(gè)Startup類,如果開始創(chuàng)建MVC項(xiàng)目的時(shí)候沒有更改身份驗(yàn)證的話,這個(gè)類會(huì)默認(rèn)添加的,如果已有就不需要重復(fù)添加了。按照如下代碼更新Startup類。

  7. 在Home控制器中創(chuàng)建一個(gè)Home Action方法

public class HomeController : Controller
  {
    public ActionResult Index()
    {
      return View();
    }

    public ActionResult About()
    {
      ViewBag.Message = "Your application description page.";

      return View();
    }

    public ActionResult Contact()
    {
      ViewBag.Message = "Your contact page.";

      return View();
    }

    public ActionResult Chat()
    {
      return View();
    }
  }

  8. 在Views文件中Home文件夾中創(chuàng)建一個(gè)Chat視圖,視圖代碼如下所示:

@{
  ViewBag.Title = "聊天窗口";
}

h2>Chat/h2>

div class="container">
  input type="text" id="message" />
  input type="button" id="sendmessage" value="Send" />
  input type="hidden" id="displayname" />
  ul id="discussion">/ul>
/div>

@section scripts
{
  !--引用SignalR庫. -->
  script src="~/Scripts/jquery.signalR-2.2.0.min.js">/script>
   !--引用自動(dòng)生成的SignalR 集線器(Hub)腳本.在運(yùn)行的時(shí)候在瀏覽器的Source下可看到 -->
  script src="~/signalr/hubs">/script>
  
  script>
    $(function () {
      // 引用自動(dòng)生成的集線器代理
      var chat = $.connection.serverHub;
      // 定義服務(wù)器端調(diào)用的客戶端sendMessage來顯示新消息
      
      chat.client.sendMessage = function (name, message) {
        // 向頁面添加消息
        $('#discussion').append('li>strong>' + htmlEncode(name)
          + '/strong>: ' + htmlEncode(message) + '/li>');
      };
      
      // 設(shè)置焦點(diǎn)到輸入框
      $('#message').focus();
      // 開始連接服務(wù)器
      $.connection.hub.start().done(function () {
        $('#sendmessage').click(function () {
          // 調(diào)用服務(wù)器端集線器的Send方法
          chat.server.send($('#message').val());
          // 清空輸入框信息并獲取焦點(diǎn)
          $('#message').val('').focus();
        });
      });
    });
    
    // 為顯示的消息進(jìn)行Html編碼
    function htmlEncode(value) {
      var encodedValue = $('div />').text(value).html();
      return encodedValue;
    }
  /script>
  }

  9. 修改App_Start文件夾內(nèi)的RoutConfig類,將Action方法默認(rèn)設(shè)置為Chat.

public class RouteConfig
  {
    public static void RegisterRoutes(RouteCollection routes)
    {
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
      routes.MapRoute(
        name: "Default",
        url: "{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Chat", id = UrlParameter.Optional }
      );
    }
  }

  到此,我們的例子就實(shí)現(xiàn)完成了,接下來我們先來看看運(yùn)行效果,之后再來解釋到底SignalR是如何來完成廣播消息的。運(yùn)行的運(yùn)行結(jié)果如下。

  從運(yùn)行結(jié)果,你可以發(fā)現(xiàn),在任何一個(gè)窗口輸入信息并發(fā)送,所有客戶端將收到該消息。這樣的效果在實(shí)際應(yīng)用中很多,如QQ,一登錄QQ的時(shí)候都會(huì)推送騰訊廣告消息。

  看完了運(yùn)行結(jié)果,接下來我們來分析下代碼,進(jìn)而來剖析下SignalR到底是如何工作的。

  按照B/S模式來看,運(yùn)行程序的時(shí)候,Web頁面就與SignalR的服務(wù)建立了連接,具體的建立連接的代碼就是:$.connection.hub.start()。這句代碼的作用就是與SignalR服務(wù)建立連接,后面的done函數(shù)表明建立連接成功后為發(fā)送按鈕注冊了一個(gè)click事件,當(dāng)客戶端輸入內(nèi)容點(diǎn)擊發(fā)送按鈕后,該Click事件將會(huì)觸發(fā),觸發(fā)執(zhí)行的操作為: chat.server.send($('#message').val())。這句代碼表示調(diào)用服務(wù)端的send函數(shù),而服務(wù)端的Send韓式又是調(diào)用所有客戶端的sendMessage函數(shù),而客戶端中sendMessage函數(shù)就是將信息添加到對(duì)應(yīng)的消息列表中。這樣就實(shí)現(xiàn)了廣播消息的功能了。

  看到這里,有人是否會(huì)有疑問,前面的實(shí)現(xiàn)都只用到了集線器對(duì)象,而沒有用到持久連接對(duì)象。其實(shí)并不是如此,$.connection這句代碼就是使用持久連接對(duì)象,當(dāng)然你也可以在重新OnConnected方法來查看監(jiān)控客戶端的連接情況,更新的代碼如下所示:

 public class ServerHub : Hub
  {
    private static readonly char[] Constant =
    {
      '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
      'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
      'w', 'x', 'y', 'z',
      'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
      'W', 'X', 'Y', 'Z'
    };

    /// summary>
    /// 供客戶端調(diào)用的服務(wù)器端代碼
    /// /summary>
    /// param name="message">/param>
    public void Send(string message)
    {
      var name = GenerateRandomName(4);

      // 調(diào)用所有客戶端的sendMessage方法
      Clients.All.sendMessage(name, message);
    }

    /// summary>
    /// 客戶端連接的時(shí)候調(diào)用
    /// /summary>
    /// returns>/returns>
    public override Task OnConnected()
    {
      Trace.WriteLine("客戶端連接成功");
      return base.OnConnected();
    }

    /// summary>
    /// 產(chǎn)生隨機(jī)用戶名函數(shù)
    /// /summary>
    /// param name="length">用戶名長度/param>
    /// returns>/returns>
    public static string GenerateRandomName(int length)
    {
      var newRandom = new System.Text.StringBuilder(62);
      var rd = new Random();
      for (var i = 0; i  length; i++)
      {
        newRandom.Append(Constant[rd.Next(62)]);
      }
      return newRandom.ToString();
    }
  }

  這樣在運(yùn)行頁面的時(shí)候,將在輸出窗口看到“客戶端連接成功”字樣。運(yùn)行效果如下圖所示:

  在第二部分介紹的時(shí)候說道,在服務(wù)端聲明的所有Hub信息,都會(huì)生成JavaScript輸出到客戶端,為了驗(yàn)證這一點(diǎn),可以在Chrome中F12來查看源碼就明白了,具體如下圖所示:

 看到上圖,你也就明白了為什么Chat.cshtml頁面需要引入"signalr/hubs"腳本庫了吧。

!--引用SignalR庫. -->
  script src="~/Scripts/jquery.signalR-2.2.0.min.js">/script>
   !--引用自動(dòng)生成的SignalR 集線器(Hub)腳本.在運(yùn)行的時(shí)候在瀏覽器的Source下可看到 -->
  script src="~/signalr/hubs">/script>

四、在桌面程序中如何使用Asp.net SignalR
   上面部分介紹了SignalR在Asp.net MVC 中的實(shí)現(xiàn),這部分將通過一個(gè)例子來看看SignalR在WPF或WinForm是如何使用的。其實(shí)這部分實(shí)現(xiàn)和Asp.net MVC中非常相似,主要不同在于,Asp.net MVC中的SignalR服務(wù)器寄宿在IIS中,而在WPF中應(yīng)用,我們把SignalR寄宿在WPF客戶端中。

下面讓我們看看SignalR服務(wù)端的實(shí)現(xiàn)。

/// summary>
    /// 啟動(dòng)SignalR服務(wù),將SignalR服務(wù)寄宿在WPF程序中
    /// /summary>
    private void StartServer()
    {
      try
      {
        SignalR = WebApp.Start(ServerUri); // 啟動(dòng)SignalR服務(wù)
      }
      catch (TargetInvocationException)
      {
        WriteToConsole("一個(gè)服務(wù)已經(jīng)運(yùn)行在:" + ServerUri);
        // Dispatcher回調(diào)來設(shè)置UI控件狀態(tài)
        this.Dispatcher.Invoke(() => ButtonStart.IsEnabled = true);
        return;
      }

      this.Dispatcher.Invoke(() => ButtonStop.IsEnabled = true);
      WriteToConsole("服務(wù)已經(jīng)成功啟動(dòng),地址為:" + ServerUri);
    }

public class ChatHub : Hub
  {
    public void Send(string name, string message)
    {
      Clients.All.addMessage(name, message);
    }

    public override Task OnConnected()
    {
      //
      Application.Current.Dispatcher.Invoke(() =>
        ((MainWindow)Application.Current.MainWindow).WriteToConsole("客戶端連接,連接ID是: " + Context.ConnectionId));

      return base.OnConnected();
    }

    public override Task OnDisconnected(bool stopCalled)
    {
       Application.Current.Dispatcher.Invoke(() =>
        ((MainWindow)Application.Current.MainWindow).WriteToConsole("客戶端斷開連接,連接ID是: " + Context.ConnectionId));

      return base.OnDisconnected(true);
    }
  }

 public class Startup
  {
    public void Configuration(IAppBuilder app)
    {
      // 有關(guān)如何配置應(yīng)用程序的詳細(xì)信息,請?jiān)L問 http://go.microsoft.com/fwlink/?LinkID=316888
      // 允許CORS跨域
      //app.UseCors(CorsOptions.AllowAll);
      app.MapSignalR();
    }
  }
 

  通過上面的代碼,我們SignalR服務(wù)端的實(shí)現(xiàn)就完成了,其實(shí)現(xiàn)邏輯與Asp.net MVC的代碼類似。

  接下來,讓我們看看,WPF客戶端是如何連接和與服務(wù)器進(jìn)行通信的。具體客戶端的實(shí)現(xiàn)如下:

 public IHubProxy HubProxy { get; set; }
    const string ServerUri = "http://localhost:8888/signalr";
    public HubConnection Connection { get; set; }

    public MainWindow()
    {
      InitializeComponent();

      // 窗口啟動(dòng)時(shí)開始連接服務(wù)
      ConnectAsync();
    }

    /// summary>
    /// 發(fā)送消息
    /// /summary>
    /// param name="sender">/param>
    /// param name="e">/param>
    private void ButtonSend_Click(object sender, RoutedEventArgs e)
    {
      // 通過代理來調(diào)用服務(wù)端的Send方法
      // 服務(wù)端Send方法再調(diào)用客戶端的AddMessage方法將消息輸出到消息框中
      HubProxy.Invoke("Send", GenerateRandomName(4), TextBoxMessage.Text.Trim());

      TextBoxMessage.Text = String.Empty;
      TextBoxMessage.Focus();
    }

    private async void ConnectAsync()
    {
      Connection = new HubConnection(ServerUri);
      Connection.Closed += Connection_Closed;

      // 創(chuàng)建一個(gè)集線器代理對(duì)象
      HubProxy = Connection.CreateHubProxy("ChatHub");

      // 供服務(wù)端調(diào)用,將消息輸出到消息列表框中
      HubProxy.Onstring, string>("AddMessage", (name, message) =>
         this.Dispatcher.Invoke(() =>
          RichTextBoxConsole.AppendText(String.Format("{0}: {1}\r", name, message))
        ));

      try
      {
        await Connection.Start();
      }
      catch (HttpRequestException)
      {
        // 連接失敗
        return;
      }

      // 顯示聊天控件
      ChatPanel.Visibility = Visibility.Visible;
      ButtonSend.IsEnabled = true;
      TextBoxMessage.Focus();
      RichTextBoxConsole.AppendText("連上服務(wù):" + ServerUri + "\r");
    }

  上面的代碼也就是WPF客戶端實(shí)現(xiàn)的核心代碼,主要邏輯為,客戶端啟動(dòng)的時(shí)候就調(diào)用Connection.Start方法與服務(wù)器進(jìn)行連接。然后通過HubProxy代理類來調(diào)用集線器中Send方法,而集線器中的Send方法又通過調(diào)用客戶端的addMessage方法將消息輸出到客戶端的消息框中進(jìn)行顯示,從而完成消息的推送過程。接下來,讓我們看看其運(yùn)行效果:

   從上面的運(yùn)行效果看出,其效果和Asp.net MVC上的效果是一樣的。

五、總結(jié)
   到這里,本專題的所有內(nèi)容就結(jié)束了,這篇SignalR快速入門也是本人在學(xué)習(xí)SignalR過程中的一些心得體會(huì),希望可以幫助一些剛接觸SignalR的朋友快速入門。本篇主要實(shí)現(xiàn)了SignalR的廣播消息的功能,可以實(shí)現(xiàn)手機(jī)端消息推送的功能,接下來一篇將介紹如何使用SignalR實(shí)現(xiàn)一對(duì)一的聊天。

您可能感興趣的文章:
  • Asp.net使用SignalR實(shí)現(xiàn)酷炫端對(duì)端聊天功能
  • Asp.NET MVC中使用SignalR實(shí)現(xiàn)推送功能
  • 詳解在ASP.NET Core下使用SignalR技術(shù)
  • Asp.net使用SignalR實(shí)現(xiàn)聊天室的功能
  • Vue結(jié)合SignalR實(shí)現(xiàn)前后端實(shí)時(shí)消息同步
  • Asp.net SignalR支持的平臺(tái)有哪些
  • Asp.net使用SignalR實(shí)現(xiàn)發(fā)送圖片
  • Asp.net使用SignalR實(shí)現(xiàn)消息提醒
  • ASP.NET用SignalR建立瀏覽器和服務(wù)器的持久連接詳解
  • ASP.NET Core SignalR中的流式傳輸深入講解

標(biāo)簽:吉林 本溪 麗江 宜春 汕頭 婁底 重慶 河南

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Asp.net SignalR快速入門》,本文關(guān)鍵詞  Asp.net,SignalR,快速,入門,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Asp.net SignalR快速入門》相關(guān)的同類信息!
  • 本頁收集關(guān)于Asp.net SignalR快速入門的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    国精品无码一区二区三区| 熟女熟妇伦久久影院毛片一区二区| 色视频欧美一区二区三区| 91超碰碰碰碰久久久久久综合| 鲁大师精品99久久久| 欧美性受xxxx黑人| 亚洲精品视频免费| 日本成人激情视频| 含羞草激情视频| 亚洲.欧美.日本.国产综合在线| 欧美韩国日本| 污污网站在线| 欧美热在线视频精品999| 亚洲视频在线免费播放| 色爱综合区网| 久久青草欧美一区二区三区| 一道精品一区二区三区| 电影天堂国产精品| 在线午夜精品自拍| 在线免费观看一区| 久久性天堂网| 91精品久久久久久粉嫩| 亚洲中文字幕无码一区二区三区| 免费福利在线视频| 精品无吗乱吗av国产爱色| 91精品国产高清一区二区三蜜臀| 欧美一区二区三区激情视频| 国产乱子伦一区二区三区国色天香| 成人免费视频网站入口::| 最新eeuss影院在线观看| 色影视在线视频资源站| 5g影院5g天天爽永久免费影院| 欧美日韩国产色视频| 久久久免费精品| 91免费版在线观看| 狠狠v欧美ⅴ日韩v亚洲v大胸| 久久久av毛片精品| 秋霞在线观看一区二区三区| 日韩av中文字幕在线免费观看| 在线成人黄色| 99久久精品久久久久久清纯| 欧美成人高潮一二区在线看| 丁香花高清电影在线观看完整版| 捆绑裸体绳奴bdsm亚洲| 日本一区二区三区在线免费观看| 粉嫩绯色av一区二区在线观看| 麻豆视频入口| 国产色在线播放| 91精品日本| 亚洲大尺度网站| 精品国产乱码久久久久| 青青草视频免费在线观看| 亚洲免费成人在线| 欧美视频在线观看 亚洲欧| 99一区二区三区| 懂色av一区二区三区蜜臀| 永久免费黄色片| 国产一区二区三区| 亚洲精品国产a久久久久久| 欧美精品激情在线| 日本精品久久久久中文字幕| 在线视频一二三区| 亚洲成人黄色片| 制服丝袜中文字幕在线| 国产视频第一页在线观看| 久久久国产精品一区二区中文| 精品亚洲一区二区三区在线播放| 午夜在线观看视频网站| 欧美精品久久久久久久久老牛影院| 春暖花开亚洲| 精品视频全国免费看| 中文字幕有码无码人妻av蜜桃| 欧美性猛交xxxx乱大交蜜桃| 国产另类自拍| 欧美黄色录像| 手机在线色视频| 日日摸.com| 四虎8848精品成人免费网站| 日韩亚洲欧美成人一区| 欧美日韩国产亚洲一区| 欧美一区二区公司| 国产精品美女久久福利网站| 欧美韩国一区| 国产午夜精品久久| 免费欧美一级视频| 在线观看av网页| 日本视频在线免费观看| 黄视频在线观看网站| 日韩一区国产在线观看| 免费黄色在线网站| 免费网站观看www在线观| 在线观看一二三区| 欧美日韩一级大片网址| 免费欧美一级片| 久久久精品在线观看| 国产激情综合五月久久| 国产情人节一区| 精品国产一区二区三区性色av| heyzo高清中文字幕在线| 加勒比色老久久爱综合网| 午夜欧美巨大性欧美巨大| 99精品电影| 999视频在线免费观看| 久久久国产精品| 91国偷自产中文字幕久久| 神马亚洲视频| 国产福利在线观看| 日韩精品视频播放| 亚洲人成精品久久久久| 双性尿奴穿贞c带憋尿| 免费看岛国视频在线观看| 欧美电影《轻佻寡妇》| 波多野结衣mp4| 久久九九视频| 国产精品25p| 91超薄丝袜肉丝一区二区| 欧美精品videosex极品1| 成人在线观看一区| 青青操视频在线观看| 欧美久久久久久一卡四| 日韩伦理一区二区| 欧美影视一区在线| 亚洲日本久久久午夜精品| 欧美成人片在线观看| 国产精品日本欧美一区二区三区| 中文字幕第一区| 亚洲av熟女国产一区二区性色| 69久久夜色精品国产69乱青草| 亚洲开发第一视频在线播放| 亚洲最大的黄色网| 国产精品久久久亚洲第一牛牛| 热久久久久久久| 国产亚av手机在线观看| 色呦呦一区二区三区| 高h视频免费观看| av在线播放国产| 少妇精品视频一区二区免费看| 国产剧情在线一区| 九九热在线视频观看这里只有精品| 91福利社在线观看| sm久久捆绑调教精品一区| 日韩午夜电影免费看| 欧美一区二区影视| 亚洲一区二区三区四区电影| 无码人妻丰满熟妇区96| 精品欧美色视频网站在线观看| 日韩精品视频免费在线观看| 秋霞av一区二区三区| 亚洲18私人小影院| 日韩 欧美 高清| 成人性做爰aaa片免费看不忠| 国产精品家庭影院| 午夜在线一区| 九九视频免费观看| 成人国产在线视频| 天天操夜夜操天天射| 欧美深深色噜噜狠狠yyy| 国产精品久久久久久久久久小说| 成人18视频日本| 末成年女av片一区二区下载| 久久uomeier| 桃色av一区二区| 亚洲日本精品视频| а√天堂资源在线| 黑人精品一区| 亚洲国产精品va在线看黑人| 欧美国产视频一区二区| 美女网站视频一区| 青青在线精品| www.亚洲.com| √天堂中文www官网| 影音先锋电影在线观看| 亚洲美女少妇撒尿| 精品国产一区二区在线| 日韩少妇内射免费播放| 日韩av理论片| 男人扒开美女尿口无遮挡图片| 一区二区三区国产精品| 九色综合国产一区二区三区| 亚洲国产精品ⅴa在线观看| 欧美国产日韩视频| 欧美最新精品| 翔田千里一区二区| 一个人看的日本www的免费视频| 亚洲五月六月| 久久亚洲道色| 韩国精品美女www爽爽爽视频| 国产91av在线| 亚洲精品动漫久久久久| 狂野欧美激情性xxxx| 欧洲人成人精品| 欧美老女人第四色| 免费看av软件| 日本中文字幕一区二区有码在线| 久久免费偷拍视频| 欧美黑人巨大xxxx猛交| 三级a性做爰视频| 亚洲一区二区三区欧美| 好男人www在线视频| 六九午夜精品视频| 亚洲欧美成人vr| 亚洲精品第一国产综合野草社区| 老鸭窝91久久精品色噜噜导演| 台湾佬中文在线| 精品视频—区二区三区免费| 亚洲一区精品视频在线观看| 国产高清视频免费| 极品少妇一区二区三区精品视频| 四虎永久免费在线观看| 国产热re99久久6国产精品| 国产激情av在线| 黄色网址网站在线观看| 国内精品伊人久久久久影院对白| 亚洲国产精品久久人人爱潘金莲| 午夜看片在线免费| 欧美亚洲国产成人| 日韩免费电影网站| 曰本三级日本三级日本三级| 区二区三区在线| 亚洲白拍色综合图区| 亚洲成人天堂网| 久久这里只有精品23| 天天天天天天操| 精品176二区| 成人久久在线| 黄动漫网站在线观看| 2021久久精品国产99国产精品| 久久综合电影| 人人玩人人添人人澡欧美| 三年片大全在线观看大全有哪些| 亚洲精品日韩在线观看| 日本泡妞xxxx免费视频软件| 91av免费看| 国产高清自拍视频在线观看| 色呦呦免费观看| 日韩成人中文电影| 亚洲精品福利网站| 亚洲精品高清视频| 久久久免费高清电视剧观看| 国产一级二级av| 免费看美女视频在线网站| 亚洲成精国产精品女| 日本a级片免费| 亚洲精品乱码久久久久久久| jizzjizzjizz在线观看| 久久久久久久人妻无码中文字幕爆| 亚洲aⅴ怡春院| 日本激情视频网站| 国产哺乳奶水91在线播放| 亚洲精品国产精品国自产网站按摩| 亚洲色成人一区二区三区小说| 国产精品日本精品| 国产精品无码久久久久一区二区| 欧美性受xxxx白人性爽| 久久久久久综合| 性xxxx视频播放免费| 99久久伊人精品影院| 少妇无码av无码专区在线观看| 国产精品成人免费| 伊人精品综合| 日日狠狠久久| 日韩激情综合| 不卡一区2区| 日本一区二区三区视频在线播放| 午夜成人在线视频| 欧美精品欧美精品系列c| 国产美女18xxxx免费视频| 人妻熟女aⅴ一区二区三区汇编| 欧美精品在线观看一区二区| av久久网站| 日韩成人高清| 国产精品国产亚洲精品看不卡15| 国产精品剧情一区二区三区| 影音先锋男人在线| 国产精品嫩草影院一区二区| www精品国产| 黄色网络在线观看| 韩日精品一区| 久久综合丝袜日本网| 色中色综合影院手机版在线观看| 久草在现在线| 色黄视频免费看| 午夜精品久久久久久久91蜜桃| 亚洲人成电影在在线观看网色| 午夜精品久久久久久久久久久久久蜜桃| 日本免费看片网站| 亚洲全部视频| 免费在线观看成人av| 一级片在线免费观看视频| 黑人无套内谢中国美女| 国产乱子精品一区二区在线观看| 亚洲综合一区二区三区| 欧美色图国产精品| 男生女生差差差的视频在线观看| 波多野结衣网站| 国产一级片网站| 日日躁天天躁狠狠躁| 国产综合色产| 祥仔av免费一区二区三区四区| 欧美体内she精视频| 国产成人a亚洲精v品无码| 亚洲一区成人在线| 蜜臀av性久久久久蜜臀aⅴ| 99久久久无码国产精品性波多| 91在线视频官网| 一级做a爱片久久毛片| 亚洲精品日产精品乱码不卡| 亚洲欧洲www| 亚洲午夜成aⅴ人片| 国产剧情精品在线| 亚洲成av人乱码色午夜| 亚洲视频在线二区| 精品人妻少妇一区二区| 97久久人人超碰caoprom欧美| аⅴ天堂中文在线网| 国产一级片播放| 欧美亚洲一区二区在线| 欧美大片在线观看一区| avtt香蕉久久| 亚洲激情黄色| 女性生殖扒开酷刑vk| 麻豆一区二区99久久久久| 国产精品成人av在线| 国产成人精品免费在线| 亚洲天堂一区二区在线观看| 亚洲免费大片| a级在线观看视频| 在线激情av|