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

主頁(yè) > 知識(shí)庫(kù) > php-msf源碼詳解

php-msf源碼詳解

熱門標(biāo)簽:外呼系統(tǒng)人工客服 全國(guó)各省地圖標(biāo)注點(diǎn) 商丘外呼系統(tǒng)好處 百度地圖標(biāo)注類型是酒店 隨州銷售電銷機(jī)器人公司 周口網(wǎng)絡(luò)回?fù)芡夂粝到y(tǒng) 網(wǎng)絡(luò)電話400申請(qǐng) 福建高頻外呼防封系統(tǒng)哪家好 400電話申請(qǐng)辦理

我們來(lái)看分享下具體源碼:php-msf: https://github.com/pinguo/php-msf

源碼解讀也做了一段時(shí)間了, 總結(jié)一下自己的心得:

抓住 生命周期, 讓代碼在你腦海中 跑起來(lái)

分析架構(gòu), 關(guān)鍵字 分層 邊界 隔離

一個(gè)好的框架, 弄清楚 生命周期 和 架構(gòu), 基本就已經(jīng)到了 熟悉 的狀態(tài)了, 之后是填充細(xì)節(jié)和編碼熟練了

這里再介紹幾個(gè)次重要的心得:

弄明白這個(gè)工具擅長(zhǎng)干什么, 適合干什么. 這個(gè)信息也非常容易獲取到, 工具的文檔通常都會(huì)顯眼標(biāo)注出來(lái), 可以通過(guò)這些 功能/特性, 嘗試以點(diǎn)見(jiàn)面

從工程化的角度去看這個(gè)項(xiàng)目, 主要和上面的 架構(gòu) 區(qū)分, 在處理核心業(yè)務(wù), 也就是上面的 功能/特性 外, 工程化還涉及到 安全/測(cè)試/編碼規(guī)范/語(yǔ)言特性 等方面, 這些也是平時(shí)在寫(xiě)業(yè)務(wù)代碼時(shí)思考較少并且實(shí)踐較少的部分

工具的使用, 推薦我現(xiàn)在使用的組合: phpstorm + 百度腦圖 + Markdown筆記 + blog和 php-msf 的淵源等寫(xiě)技術(shù)生活相關(guān)的 blog 再來(lái)和大家八, 直接上菜.

生命周期 架構(gòu)

官方文檔制作了一張非常好的圖: 處理請(qǐng)求流程圖. 推薦各位同仁, 有閑暇時(shí)制作類似的圖, 對(duì)思維很有的幫助.

根據(jù)這張圖來(lái)思考 生命周期 架構(gòu), 這里就不贅述了, 這里分析一下 msf 中一些技術(shù)點(diǎn):

協(xié)程相關(guān)知識(shí)

msf 中技術(shù)點(diǎn)摘錄

協(xié)程

我會(huì)用我的方式來(lái)講解, 如果需要深入了解的, 可以看我后面推薦的資源.

類 vs 對(duì)象 是一組很重要的概念. 類代表我們對(duì)事物的抽象, 這個(gè)抽象的能力在我們以后會(huì)一直用到, 希望大家有意識(shí)的培養(yǎng)這方面的意識(shí), 至少可以起到觸類旁通的作用. 對(duì)象是 實(shí)例化 的類, 是 真正干活的, 我們要討論的 協(xié)程, 就是這樣一個(gè) 真正干活的 角色.

協(xié)程從哪里來(lái), 到哪里去, 它是干什么的?

想一想這幾個(gè)簡(jiǎn)單的問(wèn)題, 也許你對(duì)協(xié)程的理解就更深刻了, 記住這幾個(gè)關(guān)鍵詞:

產(chǎn)生. 需要有地方來(lái)產(chǎn)生協(xié)程, 你可能不需要知道細(xì)節(jié), 但是需要知道什么時(shí)候發(fā)生了

調(diào)度. 肯定是有很多協(xié)程一起工作的, 所以需要調(diào)度, 怎么調(diào)度的呢?

銷毀. 是否會(huì)銷毀? 什么時(shí)候銷毀?

現(xiàn)在, 我們?cè)賮?lái)看看協(xié)程的使用方式對(duì)比, 這里注意一下, 我沒(méi)有用 協(xié)程的實(shí)現(xiàn)方式對(duì)比, 因?yàn)楹芏鄷r(shí)候, 需求實(shí)際是這樣的:

怎么實(shí)現(xiàn)我不管, 我選最好用的.

// msf - 單次協(xié)程調(diào)度
$response = yield $this->getRedisPool('tw')->get('apiCacheForABCoroutine');
// msf - 并發(fā)協(xié)程調(diào)用
$client1 = $this->getObject(Client::class, ['http://www.baidu.com/']);
yield $client1->goDnsLookup();
$client2 = $this->getObject(Client::class, ['http://www.qq.com/']);
yield $client2->goDnsLookup();
$result[] = yield $client1->goGet('/');
$result[] = yield $client2->goGet('/');

大致 是這樣的一個(gè)等式: 使用協(xié)程 = 加上 yield, 所以搞清楚哪些地方需要加上 yield 就好了 -- 有阻塞IO的地方, 比如 文件IO, 網(wǎng)絡(luò)IO(redis/mysql/http) 等.

當(dāng)然, 大致 就是還有需要注意的地方

協(xié)程調(diào)度順序, 如果不注意, 就可能會(huì)退化成同步調(diào)用.

調(diào)用鏈: 使用 yield 的調(diào)用鏈上, 都需要加上 yield. 比如下面這樣:

function a_test() {
  return yield $this->getRedisPool('tw')->get('apiCacheForABCoroutine');
}
$res = yield a_test(); // 如果不加 yield, 就變成了同步執(zhí)行

對(duì)比一下 swoole2.0 的協(xié)程方案:

$server = new Swoole\Http\Server("127.0.0.1", 9502, SWOOLE_BASE);
$server->set([
  'worker_num' => 1,
]);
// 需要在協(xié)程 server 的異步回調(diào)函數(shù)中
$server->on('Request', function ($request, $response) {
  $tcpclient = new Swoole\Coroutine\Client(SWOOLE_SOCK_TCP); // 需要配合使用協(xié)程客戶端
  $tcpclient->connect('127.0.0.1', 9501,0.5)
  $tcpclient->send("hello world\n");
  $redis = new Swoole\Coroutine\Redis();
  $redis->connect('127.0.0.1', 6379);
  $redis->setDefer(); // 標(biāo)注延遲收包, 實(shí)現(xiàn)并發(fā)調(diào)用
  $redis->get('key');
  $mysql = new Swoole\Coroutine\MySQL();
  $mysql->connect([
    'host' => '127.0.0.1',
    'user' => 'user',
    'password' => 'pass',
    'database' => 'test',
  ]);
  $mysql->setDefer();
  $mysql->query('select sleep(1)');
  $httpclient = new Swoole\Coroutine\Http\Client('0.0.0.0', 9599);
  $httpclient->setHeaders(['Host' => "api.mp.qq.com"]);
  $httpclient->set([ 'timeout' => 1]);
  $httpclient->setDefer();
  $httpclient->get('/');
  $tcp_res = $tcpclient->recv();
  $redis_res = $redis->recv();
  $mysql_res = $mysql->recv();
  $http_res = $httpclient->recv();
  $response->end('Test End');
});
$server->start();

使用 swoole2.0 的協(xié)程方案, 好處很明顯:

不用加 yield 了

并發(fā)調(diào)用不用刻意注意 yield 的順序了, 使用 defer() 延遲收包即可

但是, 沒(méi)辦法直接用 使用協(xié)程 = 加上 yield 這樣一個(gè)簡(jiǎn)單的等式了, 上面的例子需要配合使用 swoole 協(xié)程 server + swoole 協(xié)程 client:

server 在異步回調(diào)觸發(fā)時(shí) 生成協(xié)程

client 觸發(fā) 協(xié)程調(diào)度

異步回調(diào)執(zhí)行結(jié)束時(shí) 銷毀協(xié)程

這就導(dǎo)致了 2 個(gè)問(wèn)題:

不在 swoole 協(xié)程 server 的異步回調(diào)中怎么辦: 使用 Swoole\Coroutine::create() 顯式生成協(xié)程

需要使用其他的協(xié)程 Client 怎么辦: 這是 Swoole3 的目標(biāo), Swoole2.0 可以考慮用協(xié)程 task 來(lái)偽裝

這樣看起來(lái), 好像 使用協(xié)程 = 加上 yield 這樣要簡(jiǎn)單一些? 我不這樣認(rèn)為, 補(bǔ)充一些觀點(diǎn), 大家自己斟酌:

使用 yield 的方式, 基于 php 生成器 + 自己實(shí)現(xiàn) PHP 協(xié)程調(diào)度器, 想要用起來(lái)不出錯(cuò), 比如上面 協(xié)程調(diào)度順序, 你還是需要去弄清楚這塊的實(shí)現(xiàn)

Swoole2.0 的原生方式, 理解起來(lái)其實(shí)更容易, 只需要知道協(xié)程 生成/調(diào)度/銷毀 的時(shí)機(jī)就可以用好

Swoole2.0 這樣異步回調(diào)中頻繁創(chuàng)建和銷毀協(xié)程, 是否十分損耗性能? -- 不會(huì)的, 實(shí)際是一些內(nèi)存操作, 比進(jìn)程/對(duì)象小很多

msf 中技術(shù)點(diǎn)摘錄

msf 在設(shè)計(jì)上有很多出彩的地方, 很多代碼都值得借鑒.

請(qǐng)求上下文 Context

這是從 fpm 到 swoole http server 非常重要的概念. fpm 是多進(jìn)程模式, 雖然 $_POST 等變量, 被稱之為超全局變量, 但是, 這些變量在不同 fpm 進(jìn)程間是隔離的. 但是到了 swoole http server 中, 一個(gè) worker 進(jìn)程, 會(huì)異步處理多個(gè)請(qǐng)求, 簡(jiǎn)單理解就是下面的等式:

fpm worker : http request = 1 : 1
swoole worker : http request = 1 : n

所以, 我們就需要一種新的方式, 來(lái)進(jìn)行 request 間的隔離.

在編程語(yǔ)言里, 有一個(gè)專業(yè)詞匯 scope(作用域). 通常會(huì)使用 scope/生命周期, 所以我一直強(qiáng)調(diào)的生命周期的概念, 真的很重要.

swoole 本身是實(shí)現(xiàn)了隔離的:

$http = new swoole_http_server("127.0.0.1", 9501);
$http->on('request', function ($request, $response) {
  $response->end("h1>Hello Swoole. #".rand(1000, 9999)."/h1>");
});
$http->start();

msf 在 Context 上還做了一層封裝, 讓 Context 看起來(lái) 為所欲為:

// 你幾乎可以用這種方式, 完成任何需要的邏輯
$this->getContext()->xxxModule->xxxModuleFunction();

細(xì)節(jié)可以查看 src/Helpers/Context.php 文件

對(duì)象池

對(duì)象池這個(gè)概念, 大家可能比較陌生, 目的是減少對(duì)象的頻繁創(chuàng)建與銷毀, 以此來(lái)提升性能, msf 做了很好的封裝, 使用很簡(jiǎn)單:

// getObject() 就可以了
/** @var DemoModel $demoModel */
$demoModel = $this->getObject(DemoModel::class, [1, 2]);

對(duì)象池的具體代碼在 src/Base/Pool.php 下:

底層使用反射來(lái)實(shí)現(xiàn)對(duì)象的動(dòng)態(tài)創(chuàng)建

public function get($class, ...$args)
{
  $poolName = trim($class, '\\');

  if (!$poolName) {
    return null;
  }

  $pool   = $this->map[$poolName] ?? null;
  if ($pool == null) {
    $pool = $this->applyNewPool($poolName);
  }

  if ($pool->count()) {
    $obj = $pool->shift();
    $obj->__isConstruct = false;
    return $obj;
  } else {
    // 使用反射
    $reflector     = new \ReflectionClass($poolName);
    $obj        = $reflector->newInstanceWithoutConstructor();

    $obj->__useCount  = 0;
    $obj->__genTime  = time();
    $obj->__isConstruct = false;
    $obj->__DSLevel  = Macro::DS_PUBLIC;
    unset($reflector);
    return $obj;
  }
}

使用 SplStack 來(lái)管理對(duì)象

private function applyNewPool($poolName)
{
  if (array_key_exists($poolName, $this->map)) {
    throw new Exception('the name is exists in pool map');
  }
  $this->map[$poolName] = new \SplStack();

  return $this->map[$poolName];
}
// 管理對(duì)象
$pool->push($classInstance);
$obj = $pool->shift();

連接池 代理

連接池 Pools

連接池的概念就不贅述了, 我們來(lái)直接看 msf 中的實(shí)現(xiàn), 代碼在 src/Pools/AsynPool.php 下:

public function __construct($config)
{
  $this->callBacks = [];
  $this->commands = new \SplQueue();
  $this->pool   = new \SplQueue();
  $this->config  = $config;
}

這里使用的 SplQueue 來(lái)管理連接和需要執(zhí)行的命令. 可以和上面對(duì)比一下, 想一想為什么一個(gè)使用 SplStack, 一個(gè)使用 SplQueue.

代理 Proxy

代理是在連接池的基礎(chǔ)上進(jìn)一步的封裝, msf 提供了 2 種封裝方式:

主從 master slave

集群 cluster

查看示例 App\Controllers\Redis 中的代碼:

class Redis extends Controller
{
  // Redis連接池讀寫(xiě)示例
  public function actionPoolSetGet()
  {
    yield $this->getRedisPool('p1')->set('key1', 'val1');
    $val = yield $this->getRedisPool('p1')->get('key1');

    $this->outputJson($val);
  }
  // Redis代理使用示例(分布式)
  public function actionProxySetGet()
  {
    for ($i = 0; $i = 100; $i++) {
      yield $this->getRedisProxy('cluster')->set('proxy' . $i, $i);
    }
    $val = yield $this->getRedisProxy('cluster')->get('proxy22');
    $this->outputJson($val);
  }

  // Redis代理使用示例(主從)
  public function actionMaserSlaveSetGet()
  {
    for ($i = 0; $i = 100; $i++) {
      yield $this->getRedisProxy('master_slave')->set('M' . $i, $i);
    }

    $val = yield $this->getRedisProxy('master_slave')->get('M66');
    $this->outputJson($val);
  }
}

代理就是在連接池的基礎(chǔ)上進(jìn)一步 搞事情. 以 主從 模式為例:

主從策略: 讀主庫(kù), 寫(xiě)從庫(kù)
代理做的事情:

判斷是讀操作還是寫(xiě)操作, 選擇相應(yīng)的庫(kù)去執(zhí)行
公共庫(kù)

msf 推行 公共庫(kù) 的做法, 希望不同功能組件可以做到 可插拔, 這一點(diǎn)可以看 laravel 框架和 symfony 框架, 都由框架核心加一個(gè)個(gè)的 package 組成. 這種思想我是非常推薦的, 但是仔細(xì)看 百度腦圖 - php-msf 源碼解讀 這張圖的話, 就會(huì)發(fā)現(xiàn)類與類之間的依賴關(guān)系, 分層/邊界 做得并不好. 如果看過(guò)我之前的 blog - laravel源碼解讀 / blog - yii源碼解讀, 進(jìn)行對(duì)比就會(huì)感受很明顯.

但是, 這并不意味著 代碼不好, 至少功能正常的代碼, 幾乎都能算是好代碼. 從功能之外建立的 優(yōu)越感, 更多的是對(duì) 美好生活的向往 -- 還可以更好一點(diǎn).

AOP

php AOP 擴(kuò)展: http://pecl.php.net/package/aop

PHP-AOP擴(kuò)展介紹 | rango: http://rango.swoole.com/archives/83

AOP, 面向切面編程, 韓老大 的 blog - PHP-AOP擴(kuò)展介紹 | rango 可以看看.

需不需要了解一個(gè)新事物, 先看看這個(gè)事物有什么作用:

AOP, 將業(yè)務(wù)代碼和業(yè)務(wù)無(wú)關(guān)的代碼進(jìn)行分離, 場(chǎng)景有 日志記錄 / 性能統(tǒng)計(jì) / 安全控制 / 事務(wù)處理 / 異常處理 / 緩存 等等.
這里引用一段 程序員DD - 翟永超的公眾號(hào) 文章里的代碼, 讓大家感受下:

同樣是 CRUD, 不使用 AOP

@PostMapping("/delete")
public MapString, Object> delete(long id, String lang) {
 MapString, Object> data = new HashMapString, Object>();
 boolean result = false;
 try {
  // 語(yǔ)言(中英文提示不同)
  Locale local = "zh".equalsIgnoreCase(lang) ? Locale.CHINESE : Locale.ENGLISH;
  result = configService.delete(id, local);
  data.put("code", 0);
 } catch (CheckException e) {
  // 參數(shù)等校驗(yàn)出錯(cuò),這類異常屬于已知異常,不需要打印堆棧,返回碼為-1
  data.put("code", -1);
  data.put("msg", e.getMessage());
 } catch (Exception e) {
  // 其他未知異常,需要打印堆棧分析用,返回碼為99
  log.error(e);

  data.put("code", 99);
  data.put("msg", e.toString());
 }
 data.put("result", result);
 return data;
}

使用 AOP

@PostMapping("/delete")
public ResultBeanBoolean> delete(long id) {
 return new ResultBeanBoolean>(configService.delete(id));
}

代碼只用一行, 需要的特性一個(gè)沒(méi)少, 你是不是也想寫(xiě)這樣的 CRUD 代碼?

配置文件管理

先明確一下配置管理的痛點(diǎn):

是否支撐熱更新, 常駐內(nèi)存需要考慮

考慮不同環(huán)境: dev test production

方便使用

熱更其實(shí)可以算是常駐內(nèi)存服務(wù)器的整體需求, 目前 php 常用的解決方案是 inotify, 可以參考我之前的 blog - swoft 源碼解讀 .

msf 使用第三方庫(kù)來(lái)解析處理配置文件, 這里著重提一個(gè) array_merge() 的細(xì)節(jié):

$a = ['a' => [
  'a1' => 'a1',
]];
$b = ['a' => [
  'b1' => 'b1',
]];
$arr = array_merge($a, $b); // 注意, array_merge() 并不會(huì)循環(huán)合并
var_dump($arr);
// 結(jié)果
array(1) {
 ["a"]=>
 array(1) {
  ["b1"]=>
  string(2) "b1"
 }
}

msf 中使用配置:

$ids = $this->getConfig()->get('params.mock_ids', []);
// 對(duì)比一下 laravel
$ids = cofnig('params.mock_ids', []);

看起來(lái) laravel 中要簡(jiǎn)單一些, 其實(shí)是通過(guò) composer autoload 來(lái)加載函數(shù), 這個(gè)函數(shù)對(duì)實(shí)際的操作包裝了一層. 至于要不要這樣做, 就看自己需求了.

寫(xiě)在最后

msf 最復(fù)雜的部分在 服務(wù)啟動(dòng)階段, 繼承也很長(zhǎng):

Child -> Server -> HttpServer -> MSFServer -> AppServer, 有興趣可以挑戰(zhàn)一下.

另外一個(gè)比較難的點(diǎn), 是 MongoDbTask 實(shí)現(xiàn)原理.

msf 還封裝了很多有用的功能, RPC / 消息隊(duì)列 / restful, 大家根據(jù)文檔自己探索即可.

您可能感興趣的文章:
  • 系統(tǒng)存儲(chǔ)過(guò)程sp_MSforeachtable和sp_MSforeachdb使用說(shuō)明
  • linux系統(tǒng)安裝msf的過(guò)程詳解

標(biāo)簽:十堰 定西 迪慶 南寧 海南 佛山 六安 樂(lè)山

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《php-msf源碼詳解》,本文關(guān)鍵詞  php-msf,源碼,詳解,php-msf,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《php-msf源碼詳解》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于php-msf源碼詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    柠檬在线导航福利| 韩国中文字幕2020精品| 欧美日韩性视频在线| 国产乱码精品一区二区| 色88久久久久高潮综合影院| 99中文字幕在线| 国产一区二区三区在线观看| 免费高清在线观看| 国产成人精品999在线观看| 日韩精品人妻中文字幕有码| 日韩中文字幕免费视频| 欧美日韩一区二| 97视频免费在线观看| 黄色成年人视频在线观看| 妞干网这里只有精品| 成人性片免费| 日韩在线第二页| 国产精品久久亚洲7777| 日韩精品一二三区| 婷婷五月综合缴情在线视频| 欧美制服丝袜第一页| 久久亚洲AV成人无码国产野外| 久久7799| 91啦中文在线观看| 国产美女精品久久久| 大伊香蕉精品视频在线| 国产黄网站在线观看| 国产在线视频99| 色天天综合久久久久综合片| 日韩美女一级片| 欧美a级成人淫片免费看| 欧美日韩国产免费一区二区三区| av综合电影网站| 北条麻妃国产九九九精品小说| 蜜桃91丨九色丨蝌蚪91桃色| 欧美大片在线免费观看| 91免费视频大全| 精品国产第一国产综合精品| 又黄又爽无遮挡| 在线观看免费av网址| 亚洲美女中文字幕| 亚洲欧洲偷拍精品| 久草视频免费看| 三级在线免费看| 这里只有久久精品| 国产欧美高清在线| 成人动漫视频在线观看完整版| 91av免费观看91av精品在线| 欧美国产极速在线| 亚洲美女免费在线| 国内毛片久久| 大陆一级毛片免费观看| 欧美大片免费高清观看| 国产日韩亚洲欧美综合| 亚洲精品久久久久久久蜜桃臀| 日韩少妇高潮抽搐| 91精品综合久久| 精品成人免费观看| 亚洲精品自拍视频| 日韩aⅴ视频一区二区三区| 日韩一区精品视频| av女同在线| 日本系列第一页| 久久久久九九视频| 免费精品一区二区三区在线观看| 午夜三级在线观看| 久久国产一区二区| 动漫av网站免费观看| 1024精品久久久久久久久| 日本精品一区在线观看| 日漫免费在线观看网站| 经典三级久久| 在线免费观看av影视天堂| 欧美中文高清| 日韩精品xxx| 综合图区亚洲白拍在线| 亚洲欧美中文另类| 强行糟蹋人妻hd中文| 毛片精品免费在线观看| 国产精品视频播放| 色一情一乱一伦一区二区三欧美| 性生活一级大片| 疯狂做受xxxx欧美肥白少妇| 日韩欧美自拍| 农民人伦一区二区三区| 国产a视频免费观看| 很黄很a的视频| 99视频在线观看视频| 日本免费一区二区三区| 在线播放亚洲一区| 国产日产精品一区二区三区| 亚洲伊人成综合成人网| 热这里只有精品| 欧洲美女精品免费观看视频| 国产女人18毛片18精品| 一级黄色片视频| 欧美日韩精品在线一区二区| 国模私拍视频在线| 日韩精品一区二区三区免费视频| 成人黄18免费网站| 亚洲18私人小影院| 日韩一级免费片| jizzjizz韩国| 九七电影韩国女主播在线观看| 一区二区成人免费视频| 成人黄色网址在线观看| 色噜噜狠狠狠综合曰曰曰| 人人干人人视频| 久久久精品久久久久| 亚洲欧美在线观看视频| 免费毛片在线播放| 69精品国产久热在线观看| 日韩视频在线观看一区二区三区| 欧美日韩国产精品综合| 免费在线观看的av| 欧美综合视频| 99九九电视剧免费观看| 国产精品一区二区视频| 粉嫩av一区二区三区天美传媒| 色av男人的天堂免费在线| 国产精品婷婷| 亚洲精品乱码久久久久久9色| 国产精品久久久久久久久婷婷| 国产午夜精品理论片| 伊人国产在线视频| 欧美日韩在线视频观看| 久久精品视频一区| 青草青草久热精品视频在线网站| 性生大片免费观看性| 91精品国产自产在线丝袜啪| 天堂中文字幕av| 久久99精品视频一区97| 不卡一区二区中文字幕| 99reav2| 久久综合九色综合久久久精品综合| 免费h片在线| a级免费在线观看| 日本在线视频1区| 又黄又色的网站| 在线看片网址| 蜜臀aⅴ国产精品久久久国产老师| 欧美性受xxxx黑人xyx| 国产色视频一区| 风韵丰满熟妇啪啪区老熟熟女| 欧美sm精品调教视频| 国产精品自拍在线| 欧美精品777| 99re8这里有精品热视频免费| 久久精品网站免费观看| 亚洲国产欧洲综合997久久| 亚洲精品一区二区三区樱花| 国产91精品不卡视频| 一本大道av一区二区在线播放| 99久久99精品| 亚洲天天在线日亚洲洲精| 激情黄产视频在线免费观看| 丰满白嫩尤物一区二区| 久久中文字幕导航| 亚洲美女在线看| 亚洲精品第一页| 日韩欧美一中文字暮专区| 啊v视频在线一区二区三区| 亚洲三级国产| 北条麻妃在线一区二区免费播放| 亚洲3atv精品一区二区三区| 免费亚洲一区二区| 亚洲丝袜另类动漫二区| 大桥未久在线播放| 国模吧精品人体gogo| 成人永久aaa| 国产欧美精品一区二区三区| 区一区二区三区中文字幕| 在线日韩电影| 羞羞网站在线观看入口免费| 亚洲高清av| 中文欧美日本在线资源| 91久久久久久久一区二区| 四虎中文字幕| 在线观看中文av| 精品麻豆一区二区三区| 亚洲欧美日韩中文在线| 久久社区一区| 少妇精品在线| 中文在线观看免费视频| 看黄的a网站| 成年人午夜剧场| 红杏aⅴ成人免费视频| 成人黄色免费网站在线观看| 精品国产一区二区三区四区精华| 亚洲人成精品久久久久| 麻豆明星ai换脸视频| 黄色亚洲在线| 极品白嫩少妇无套内谢| 欧美激情手机在线视频| 人妻少妇精品一区二区三区| 欧美激情在线观看视频| 亚洲欧美在线精品| 中文字幕一区二区在线视频| 欧美视频在线观看免费| 中文字幕亚洲一区在线观看| 国产精品成人无码免费| 国产人妻精品午夜福利免费| 99re视频这里只有精品| 精品国产国产综合精品| 97在线免费| 亚洲乱码中文字幕综合| 中文字幕久久网| 成熟老妇女视频| 国产aⅴ超薄肉色丝袜交足| 欧美三级欧美成人高清www| 美女的奶胸大爽爽大片| 欧美国产精品日韩| 国产免费黄视频在线观看| 日韩经典一区| 天堂а√在线中文在线新版| 日韩欧美中文字幕在线视频| 青娱乐国产精品视频| 欧美色视频在线| 三级在线看中文字幕完整版| 一区二区欧美在线观看| 日韩av电影在线免费播放| 精品一区二区三区四区五区六区| 欧美精品一区三区在线观看| 人与动性xxxxx免费视频| 91亚洲精选| 精品成人一区二区三区四区| 国产精品资源站在线| 美女黄色免费看| 日韩网站免费观看高清| 欧美综合天天夜夜久久| 在线视频免费在线观看一区二区| 日本国产欧美一区二区三区| 成人性生交大片免费看中文网站| 精品毛片网大全| 性欧美欧美巨大69| 天天av导航| 色哟哟在线观看| 精品欧美一区二区久久久| 国产成人免费在线| 国产又粗又猛视频| 欧美在线观看一区二区| 黄页免费在线观看| 天天影院图片亚洲| 国产另类ts人妖一区二区| 日韩精选在线| 麻豆国产在线| 亚洲成人精品女人久久久| 国产精品九色蝌蚪自拍| 久久久久久久久久久久久女国产乱| 那种视频在线观看| 日本在线免费| 欧美韩日一区二区三区四区| 麻豆精品在线看| 97精品久久久| 欧美办公室脚交xxxx| 天天色天天上天天操| 波多野结衣家庭教师在线| 中文字幕在线免费不卡| 捆绑紧缚一区二区三区在线观看| 亚洲同志网站入口| 国产成人超碰人人澡人人澡| 欧美一级免费看| 国产精品视频免费在线观看| 日韩视频在线一区二区三区| 精品大片一区二区| 亚洲福利在线观看视频| www.av亚洲| 成人午夜福利一区二区| 夜夜春亚洲嫩草影视日日摸夜夜添夜| 91社区国产高清| 免费黄色网网址| 日本中文字幕精品| 日本美女黄色一级片| 欧美另类精品xxxx孕妇| 欧美专区亚洲专区| 亚洲欧美日韩国产中文| www.在线视频| 日韩av黄色在线| 亚洲一区精品电影| 成人午夜国产福到在线| 亚洲熟妇无码一区二区三区| 免费黄色在线视频网站| 欧美国产日本高清在线| 九色91在线| 国产熟妇久久777777| 亚洲午夜久久久影院| 欧美久久综合性欧美| 亚洲一二三在线观看| 激情六月天婷婷| 亚洲bt欧美bt精品777| 久久久久九九九九| 北条麻妃亚洲一区| 男人天堂欧美日韩| 视频免费裸体网站| 国产丝袜精品丝袜| 国产精品污www一区二区三区| www.91香蕉视频| www.欧美三级电影.com| 无码国产精品一区二区色情男同| xxxxxx国产精品视频| 久久精品一区中文字幕| 亚洲在线观看视频| 高潮一区二区三区乱码| 久久久久亚洲精品中文字幕| 久久国产这里只有精品| 亚洲激情中文在线| 国产乱码精品一区二区三区av| 蜜桃av在线| 黑丝美女一区二区| 日本高清不卡aⅴ免费网站| 欧美精品啪啪| 德国极品另类| 欧美专区国产专区| 日本道在线视频| 国产精品黄色片| 精品无人区太爽高潮在线播放| 神马久久桃色视频| 老司机午夜精品99久久| 99在线欧洲视频| 精品国产三级电影在线观看| 欧美美女性生活视频| 91在线电影| 国产玖玖精品视频| 成人欧美一区二区三区小说| 少妇激情av一区二区三区| 成人日韩在线观看| 丁香花在线观看完整版电影| 杨幂一区欧美专区|