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

主頁 > 知識(shí)庫 > ThinkPHP5 框架引入 Go AOP,PHP AOP編程項(xiàng)目詳解

ThinkPHP5 框架引入 Go AOP,PHP AOP編程項(xiàng)目詳解

熱門標(biāo)簽:邢臺(tái)400電話辦理 南京3D地圖標(biāo)注 重慶外呼電銷系統(tǒng)多少錢 嘟嘟云外呼系統(tǒng) 南寧電話外呼系統(tǒng)線路 正規(guī)電銷機(jī)器人系統(tǒng) 咸陽電銷 辦理400電話哪家好點(diǎn) 濟(jì)源百應(yīng)電銷機(jī)器人聯(lián)系方式

本文實(shí)例講述了ThinkPHP5 框架引入 Go AOP,PHP AOP編程。分享給大家供大家參考,具體如下:

項(xiàng)目背景

目前開發(fā)的WEB軟件里有這一個(gè)功能,PHP訪問API操作數(shù)據(jù)倉(cāng)庫,剛開始數(shù)據(jù)倉(cāng)庫小,沒發(fā)現(xiàn)問題,隨著數(shù)據(jù)越來越多,調(diào)用API時(shí)常超時(shí)(60s)。于是決定采用異步請(qǐng)求,改為60s能返回?cái)?shù)據(jù)則返回,不能則返回一個(gè)異步ID,然后輪詢是否完成統(tǒng)計(jì)任務(wù)。由于項(xiàng)目緊,人手不足,必須以最小的代價(jià)解決當(dāng)前問題。

方案選擇

  1. 重新分析需求,并改進(jìn)代碼
  2. 采用AOP方式改動(dòng)程序

從新做需求分析,以及詳細(xì)設(shè)計(jì),并改動(dòng)代碼,需要產(chǎn)品,架構(gòu),前端,后端的支持。會(huì)驚動(dòng)的人過多,在資源緊張的情況下是不推薦的。
采用AOP方式,不改動(dòng)原有代碼邏輯,只需要后端就能完成大部分任務(wù)了。后端用AOP切入請(qǐng)求API的方法,通過監(jiān)聽API返回的結(jié)果來控制是否讓其繼續(xù)運(yùn)行原有的邏輯(API在60s返回了數(shù)據(jù)),或者是進(jìn)入離線任務(wù)功能(API報(bào)告統(tǒng)計(jì)任務(wù)不能在60s內(nèi)完成)。

之前用過AOP-PHP拓展,上手很簡(jiǎn)單,不過后來在某一個(gè)大項(xiàng)目中引入該拓展后,直接爆了out of memory,然后就研究其源碼發(fā)現(xiàn),它改變了語法樹,并Hook了每個(gè)被調(diào)用的方法,也就是每個(gè)方法被調(diào)用是都會(huì)去詢問AOP-PHP,這個(gè)方法有沒有切面方法。所以效率損失是比較大的。而且這個(gè)項(xiàng)目距離現(xiàn)在已經(jīng)有8年沒更新了。所以不推薦該解決方案。

實(shí)際環(huán)境

Debian,php-fpm-7.0,ThinkPHP-5.10。

引入AOP

作為一門zui好的語言,PHP是不自帶AOP的。那就得安裝AOP-PHP拓展,當(dāng)我打開pecl要下載時(shí),傻眼了,全是bate版,沒有顯示說明支持php7。但我還是抱著僥幸心理,找到了git,發(fā)現(xiàn)4-5年沒更新了,要不要等一波更新,哦,作者在issue里說了有時(shí)間就開始兼容php7。
好吧,狠話不多說,下一個(gè)方案:Go!AOP.看了下git,作者是個(gè)穿白體恤,喜歡山峰的大帥哥,基本每個(gè)issue都會(huì)很熱心回復(fù)。

composer require goaop/framework

ThinkPHP5 對(duì)composer兼容挺不錯(cuò)的哦,(到后面,我真想揍ThinkPHP5作者)這就裝好了,怎么用啊,git上的提示了簡(jiǎn)單用法。我也就照著寫了個(gè)去切入controller。

?PHP
namespace app\tests\controller;

use think\Controller;

class Test1 extends Controller
{
 public function test1()
 {
  echo $this->aspectAction();
 }
 
 public function aspectAction()
 {
  return 'hello';
 }
}

定義aspect

?PHP
namespace app\tests\aspect;

use Go\Aop\Aspect;
use Go\Aop\Intercept\FieldAccess;
use Go\Aop\Intercept\MethodInvocation;
use Go\Lang\Annotation\After;
use Go\Lang\Annotation\Before;
use Go\Lang\Annotation\Around;
use Go\Lang\Annotation\Pointcut;

use app\tests\controller\Test1;

class MonitorAspect implements Aspect
{

 /**
  * Method that will be called before real method
  *
  * @param MethodInvocation $invocation Invocation
  * @Before("execution(public|protected app\tests\controller\Test1->aspectAction(*))")
  */
 public function beforeMethodExecution(MethodInvocation $invocation)
 {
  $obj = $invocation->getThis();
  echo 'Calling Before Interceptor for method: ',
    is_object($obj) ? get_class($obj) : $obj,
    $invocation->getMethod()->isStatic() ? '::' : '->',
    $invocation->getMethod()->getName(),
    '()',
    ' with arguments: ',
    json_encode($invocation->getArguments()),
    "br>\n";
 }
}

啟用aspect

?PHP
// file: ./application/tests/service/ApplicationAspectKernel.php

namespace app\tests\service;

use Go\Core\AspectKernel;
use Go\Core\AspectContainer;

use app\tests\aspect\MonitorAspect;

/**
 * Application Aspect Kernel
 *
 * Class ApplicationAspectKernel
 * @package app\tests\service
 */
class ApplicationAspectKernel extends AspectKernel
{

 /**
  * Configure an AspectContainer with advisors, aspects and pointcuts
  *
  * @param AspectContainer $container
  *
  * @return void
  */
 protected function configureAop(AspectContainer $container)
 {
  $container->registerAspect(new MonitorAspect());
 }
}

go-aop 核心服務(wù)配置

?PHP
// file: ./application/tests/behavior/Bootstrap.php
namespace app\tests\behavior;

use think\Exception;
use Composer\Autoload\ClassLoader;
use Go\Instrument\Transformer\FilterInjectorTransformer;
use Go\Instrument\ClassLoading\AopComposerLoader;
use Doctrine\Common\Annotations\AnnotationRegistry;

use app\tests\service\ApplicationAspectKernel;
use app\tests\ThinkPhpLoaderWrapper;

class Bootstrap
{
 public function moduleInit($params)
 {
  $applicationAspectKernel = ApplicationAspectKernel::getInstance();
  $applicationAspectKernel->init([
   'debug' => true,
   'appDir' => __DIR__ . './../../../',
    'cacheDir' => __DIR__ . './../../../runtime/aop_cache',
    'includePaths' => [
     __DIR__ . './../../tests/controller',
     __DIR__ . './../../../thinkphp/library/think/model'
    ],
    'excludePaths' => [
     __DIR__ . './../../aspect',
    ]
   ]);
  return $params;
 }
}

配置模塊init鉤子,讓其啟動(dòng) go-aop

?PHP
// file: ./application/tests/tags.php
// 由于是thinkphp5.10 沒有容器,所有需要在module下的tags.php文件里配置調(diào)用他

return [
 // 應(yīng)用初始化
 'app_init'  => [],
 // 應(yīng)用開始
 'app_begin' => [],
 // 模塊初始化
 'module_init' => [
  'app\\tests\\behavior\\Bootstrap'
 ],
 // 操作開始執(zhí)行
 'action_begin' => [],
 // 視圖內(nèi)容過濾
 'view_filter' => [],
 // 日志寫入
 'log_write' => [],
 // 應(yīng)用結(jié)束
 'app_end'  => [],
];

兼容測(cè)試

好了,訪問 http://127.0.0.1/tests/test1/test1 顯示:

hello

這不是預(yù)期的效果,在aspect定義了,訪問該方法前,會(huì)輸出方法的更多信息信息。
像如下內(nèi)容才是預(yù)期

Calling Before Interceptor for method: app\tests\controller\Test1->aspectAction() with arguments: []

上他官方Doc看看,是一些更高級(jí)的用法。沒有講go-aop的運(yùn)行機(jī)制。
上git上也沒看到類似issue,額,發(fā)現(xiàn)作者經(jīng)常在issue里回復(fù):試一試demo。也許我該試試demo。

Run Demos

我采用的是LNMP技術(shù)棧。

  1. 假設(shè)這里有臺(tái)Ubuntu你已經(jīng)配置好了LNMP環(huán)境
  2. 下載代碼
  3. 配置nginx
# file: /usr/share/etc/nginx/conf.d/go-aop-test.conf
server {
 listen 8008;
# listen 443 ssl;
 server_name 0.0.0.0;
 root "/usr/share/nginx/html/app/vendor/lisachenko/go-aop-php/demos";
 index index.html index.htm index.php;
 charset utf-8;

 access_log /var/log/nginx/go-aop-access.log;
 error_log /var/log/nginx/go-aop-error.log notice;

 sendfile off;
 client_max_body_size 100m;

 location ~ \.php(.*)$ {
  include       fastcgi_params;
  fastcgi_pass      127.0.0.1:9000;
  fastcgi_index      index.php;

  fastcgi_param      PATH_INFO  $fastcgi_path_info;
#  fastcgi_param     SCRIPT_FILENAME /var/www/html/app/vendor/lisachenko/go-aop-php/demos$fastcgi_script_name; #docker的配置
  fastcgi_param      SCRIPT_FILENAME /usr/share/nginx/html/api/vendor/lisachenko/go-aop-php/demos$fastcgi_script_name;
  fastcgi_param      PATH_TRANSLATED $document_root$fastcgi_path_info;
  fastcgi_split_path_info   ((?U).+\.php)(/?.+)$;
 }
}

接下來要調(diào)整下代碼

  1. 訪問 http://127.0.0.1:8008 試試,(估計(jì)大家都遇到了這個(gè))

  1. 這個(gè)報(bào)錯(cuò)信息提示找不到這個(gè)類。來到報(bào)錯(cuò)的文件里。這文件使用了use找不到類,就是autoload出問題了,看到 vendor/lisachenko/go-aop-php/demos/autoload.php 這個(gè)文件。
?PHP
···
if (file_exists(__DIR__ . '/../vendor/autoload.php')) {
 /** @var Composer\Autoload\ClassLoader $loader */
 $loader = include __DIR__ . '/../vendor/autoload.php';
 $loader->add('Demo', __DIR__);
}

可以看到這個(gè)代碼第一行沒找到vendor下的autoload。我們做如下調(diào)整

?PHP
$re = __DIR__ . '/../../../vendor/autoload.php';
if (file_exists(__DIR__ . '/../../../autoload.php')) {
 /** @var Composer\Autoload\ClassLoader $loader */
 $loader = include __DIR__ . '/../../../autoload.php';
 $loader->add('Demo', __DIR__);
}

再試試,demo運(yùn)行起來了。


嘗試了下,運(yùn)行成功


通過以上的輸出,可以得出demo里是對(duì)方法運(yùn)行前成功捕獲。為什么在thinkphp的controller里運(yùn)行就不成功呢。我決定采用斷點(diǎn)進(jìn)行調(diào)試。

通過斷點(diǎn)我發(fā)現(xiàn)了這個(gè)文件

?PHP
// file: ./vendor/lisachenko/go-aop-php/src/Instrument/ClassLoading/AopComposerLoader.php

public function loadClass($class)
{
 if ($file = $this->original->findFile($class)) {
  $isInternal = false;
  foreach ($this->internalNamespaces as $ns) {
   if (strpos($class, $ns) === 0) {
    $isInternal = true;
    break;
   }
  }

  include ($isInternal ? $file : FilterInjectorTransformer::rewrite($file));
 }
}

這是一個(gè)autoload,每個(gè)類的載入都會(huì)經(jīng)過它,并且會(huì)對(duì)其判斷是否為內(nèi)部類,不是的都會(huì)進(jìn)入后續(xù)的操作。通過斷點(diǎn)進(jìn)入 FilterInjectorTransformer,發(fā)現(xiàn)會(huì)對(duì)load的文件進(jìn)行語法解析,并根據(jù)注冊(cè)的annotation對(duì)相關(guān)的類生成proxy類。說道這,大家就明白了go-aop是如何做到切入你的程序了吧,生成的proxy類,可以在你配置的cache-dir(我配置的是./runtime/aop_cache/)里看到。

同時(shí)./runtime/aop_cache/ 文件夾下也生成了很多東西,通過查看aop_cache文件內(nèi)產(chǎn)生了與Test1文件名相同的文件,打開文件,發(fā)現(xiàn)它代理了原有的Test1控制器。這一系列信息,可以得出,Go!AOP 通過"劫持" composer autoload 讓每個(gè)類都進(jìn)過它,根據(jù)aspect的定義來決定是否為其創(chuàng)建一個(gè)代理類,并植入advice。
額,ThinkPHP5是把composer autoload里的東西copy出來,放到自己autoload里,然后就沒composer啥事了。然后go-aop一直等不到composer autoload下發(fā)的命令,自然就不能起作用了,so,下一步

改進(jìn)ThinkPHP5

在ThinkPHP5里,默認(rèn)有且只會(huì)注冊(cè)一個(gè)TP5內(nèi)部的 Loader,并不會(huì)把include請(qǐng)求下發(fā)給composer的autoload。所以,為其讓go-aop起作用,那么必須讓讓include class的請(qǐng)求經(jīng)過 AopComposerLoad.
我們看看這個(gè)文件

?PHP
// ./vendor/lisachenko/go-aop-php/src/Instrument/ClassLoading/AopComposerLoader.php:57

public static function init()
{
 $loaders = spl_autoload_functions();

 foreach ($loaders as $loader) {
  $loaderToUnregister = $loader;
  if (is_array($loader)  ($loader[0] instanceof ClassLoader)) {
   $originalLoader = $loader[0];

   // Configure library loader for doctrine annotation loader
   AnnotationRegistry::registerLoader(function ($class) use ($originalLoader) {
    $originalLoader->loadClass($class);

    return class_exists($class, false);
   });
   $loader[0] = new AopComposerLoader($loader[0]);
  }
  spl_autoload_unregister($loaderToUnregister);
 }
 unset($loader);

 foreach ($loaders as $loader) {
  spl_autoload_register($loader);
 }
}

這個(gè)文件里有個(gè)類型檢測(cè),檢測(cè)autoload callback是否為Classloader類型,然而ThinkPHP5不是,通過斷點(diǎn)你會(huì)發(fā)現(xiàn)ThinkPHP5是一個(gè)字符串?dāng)?shù)組,so,這里也就無法把go-aop注冊(cè)到class loader的callback當(dāng)中了。

這里就要提一下PHP autoload機(jī)制了,這是現(xiàn)代PHP非常重要的一個(gè)功能,它讓我們?cè)谟玫揭粋€(gè)類時(shí),通過名字能自動(dòng)加載文件。我們通過定義一定的類名規(guī)則與文件結(jié)構(gòu)目錄,再加上能實(shí)現(xiàn)以上規(guī)則的函數(shù)就能實(shí)現(xiàn)自動(dòng)加載了。在通過 spl_autoload_register 函數(shù)的第三個(gè)參數(shù) prepend 設(shè)置為true,就能讓其排在在TP5的loader前面,先一步被調(diào)用。

依照如上原理,就可以做如下改進(jìn)
這個(gè)是為go-aop包裝的新autoload,本質(zhì)上是在原來的ThinkPHP5的loader上加了一個(gè)殼而已。

?PHP
// file: ./application/tests 

namespace app\tests;

require_once __DIR__ . './../../vendor/composer/ClassLoader.php';

use think\Loader;
use \Composer\Autoload\ClassLoader;
use Go\Instrument\Transformer\FilterInjectorTransformer;
use Go\Instrument\ClassLoading\AopComposerLoader;
use Doctrine\Common\Annotations\AnnotationRegistry;


class ThinkPhpLoaderWrapper extends ClassLoader
{
 static protected $thinkLoader = Loader::class;

 /**
  * Autoload a class by it's name
  */
 public function loadClass($class)
 {
  return Loader::autoload($class);
 }

 /**
  * {@inheritDoc}
  */
 public function findFile($class)
 {
  $allowedNamespace = [
   'app\tests\controller'
  ];
  $isAllowed = false;
  foreach ($allowedNamespace as $ns) {
   if (strpos($class, $ns) === 0) {
    $isAllowed = true;
    break;
   }
  }
  // 不允許被AOP的類,則不進(jìn)入AopComposer
  if(!$isAllowed)
   return false;
  
  $obj = new Loader;
  $observer = new \ReflectionClass(Loader::class);

  $method = $observer->getMethod('findFile');
  $method->setAccessible(true);
  $file = $method->invoke($obj, $class);
  return $file;
 }
}
?PHP
// file: ./application/tests/behavior/Bootstrap.php 在剛剛我們新添加的文件當(dāng)中
// 這個(gè)方法 \app\tests\behavior\Bootstrap::moduleInit 的后面追加如下內(nèi)容

// 組成AOPComposerAutoLoader
$originalLoader = $thinkLoader = new ThinkPhpLoaderWrapper();
AnnotationRegistry::registerLoader(function ($class) use ($originalLoader) {
 $originalLoader->loadClass($class);

 return class_exists($class, false);
});
$aopLoader = new AopComposerLoader($thinkLoader);
spl_autoload_register([$aopLoader, 'loadClass'], false, true);

return $params;

在這里我們做了一個(gè)autload 并直接把它插入到了最前面(如果項(xiàng)目?jī)?nèi)還有其他autloader,請(qǐng)注意他們的先后順序)。

最后

現(xiàn)在我們?cè)僭L問一下 http://127.0.0.1/tests/test1/test1 你就能看到來自 aspect 輸出的信息了。

最后我們做個(gè)總結(jié):

  1. PHP7 目前沒有拓展實(shí)現(xiàn)的 AOP。
  2. ThinkPHP5 有著自己的 Autoloader。
  3. Go!AOP 的AOP實(shí)現(xiàn)依賴Class Autoloadcallback,通過替換原文件指向Proxy類實(shí)現(xiàn)。
  4. ThinkPHP5 整合 Go!AOP 需要調(diào)整 autoload。

更多關(guān)于thinkPHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《ThinkPHP入門教程》、《thinkPHP模板操作技巧總結(jié)》、《ThinkPHP常用方法總結(jié)》、《codeigniter入門教程》、《CI(CodeIgniter)框架進(jìn)階教程》、《Zend FrameWork框架入門教程》及《PHP模板技術(shù)總結(jié)》。

希望本文所述對(duì)大家基于ThinkPHP框架的PHP程序設(shè)計(jì)有所幫助。

您可能感興趣的文章:
  • ThinkPHP類似AOP思想的參數(shù)驗(yàn)證的實(shí)現(xiàn)方法
  • php筆記之:AOP的應(yīng)用
  • PHP三層結(jié)構(gòu)(下) PHP實(shí)現(xiàn)AOP
  • PHP AOP教程案例

標(biāo)簽:河南 武漢 隴南 黃山 平頂山 南通 通遼 唐山

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《ThinkPHP5 框架引入 Go AOP,PHP AOP編程項(xiàng)目詳解》,本文關(guān)鍵詞  ThinkPHP5,框架,引入,AOP,PHP,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《ThinkPHP5 框架引入 Go AOP,PHP AOP編程項(xiàng)目詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于ThinkPHP5 框架引入 Go AOP,PHP AOP編程項(xiàng)目詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    亚洲精品国产熟女久久久| 精品96久久久久久中文字幕无| 日本在线不卡视频一二三区| 亚洲精品毛片一区二区三区| 超碰中文字幕在线观看| 国产黄色网址在线观看| aⅴ在线视频男人的天堂| 欧美巨大xxxx做受沙滩| 日日天天狠狠| av先锋影音资源站| 国产精品五月天| 91色中文字幕| 精品亚洲成a人片在线观看| xxxx国产精品| 亚洲精品国产电影| 一区精品在线观看| 欧美在线免费一级片| 精品国产亚洲AV| 亚洲精品高清无码视频| 亚洲精品黑牛一区二区三区| 亚洲国产成人av好男人在线观看| 欧美日韩mv| 高清不卡一二三区| 精品国产免费人成电影在线观看四季| 91在线观看一区二区| 国产精品无遮挡| 亚洲福利视频免费观看| 国产精品美女无圣光视频| 亚洲国产精品久久人人爱| 爱草tv视频在线观看992| 久久久久久无码精品人妻一区二区| 欧美日韩色一区| 日韩电影大全免费观看2023年上| 中文字幕永久有效| 国产精品夜夜嗨| 亚洲日本va午夜在线影院| 人妻丰满熟妇av无码区hd| 欧美色欧美亚洲另类二区| 欧美精品手机在线| 一女三黑人理论片在线| 一区二区三区视频免费视频观看网站| 成人黄色在线电影| 中日韩男男gay无套| 99国产视频在线| www.神马久久| 欧美在线一区二区视频| 在线视频中文字幕| 国产黄色一级片| 日韩a视频在线观看| 国产香蕉一区二区三区在线视频| 亚洲成人观看| 福利地址发布页| 久久综合精品国产一区二区三区| 99er在线视频| 97se亚洲| 国产一区二区精品丝袜| xxxx18国产| 日韩av一区二区在线影视| 91成人抖音| 欧美猛烈性xbxbxbxb| 亚洲伊人一本大道中文字幕| 青春草免费在线视频| 99国产成人精品| 久久99蜜桃精品久久久久小说| 亚洲一区二区偷拍精品| 精品91在线| 天堂va在线高清一区| 99re这里都是精品| 国语自产精品视频在免费| 精品久久人妻av中文字幕| 久久激五月天综合精品| 一本大道av一区二区在线播放| 久久精品一区中文字幕| 欧美a v在线播放| 在线观看免费视频污| 91在线看视频| 久久精品网站免费观看| 亚洲精品国产精品国自产观看| 天天插天天操| 真实国产乱子伦精品一区二区三区| 看片网站在线观看| 国产在线传媒| 美女写真理伦片在线看| 另类调教123区| 欧美激情理论| 欧美激情亚洲色图| 国产精品一区二区3区| 日本三级韩国三级久久| 欧美日韩在线观看一区二区| 高清色视频在线观看| 色窝窝无码一区二区三区成人网站| 北岛玲一区二区| 免费在线观看视频一区| 欧美日韩综合视频网址| 亚洲av成人精品毛片| 精品女同一区二区三区在线观看| 一二三四在线观看免费高清中文在线观看| 91av视频在线免费观看| 亚洲成av人片在www色猫咪| 黄色成人免费网| 欧美在线播放高清精品| 欧美成年网站| 亚洲美女屁股眼交3| 激情小视频网站| 最近中文字幕在线中文高清版| 日本一级理论片在线大全| 被男同事摸的水好多| 国产精品久久久久久av下载红粉| 中文有码久久| 热99在线观看| 亚洲二区视频| 伊人网在线免费| 99久久精品国产色欲| 成人精品鲁一区一区二区| 国产精品久久久久久亚洲色| 777午夜精品电影免费看| 中文字幕亚洲一区二区三区| 欧美超强性xxxxx| 日韩一区二区三区在线视频| 久久精品一区蜜桃臀影院| 黄色毛片在线| 成入视频在线观看| 3atv在线一区二区三区| 激情成人四房播| 亚洲成人黄色av| 99久久综合狠狠综合久久| 色婷婷综合久久久久中文字幕| 91精品啪在线观看国产爱臀| 91导航在线观看| 免费中文字幕日韩欧美| 亚洲影院中文字幕| 视频一区欧美日韩| 日本公妇乱淫免费视频一区三区| 在线观看完整版免费| 日本精品一区二区三区在线播放| 亚洲综合色网站| 牛人盗摄一区二区三区视频| 欧美亚洲色图视频| 日韩大片在线永久免费观看网站| 91在线视频免费| av大片免费看| 一级在线观看视频| 在线观看av中文| 在线播放日韩专区| av午夜一区麻豆| 欧美freesex8一10精品| 国产欧美日韩三区| 国产一区二区精品久久| 国产精品久久久久久亚洲毛片| 黄网站色欧美视频| 免费久久99精品国产自| 成人满18在线观看网站免费| 国产欧美日韩一区二区三区在线观看| 捆绑调教一区二区三区| 免费人成年激情视频在线观看| 日韩av电影手机在线| 黄色三级小视频| 日韩精品视频一区二区在线观看| 在线播放精品视频| 久久丁香综合五月国产三级网站| 欧美aa在线视频| 一本色道久久综合亚洲| 日精品一区二区三区| 国产成人久久婷婷精品流白浆| 黄色av小说在线观看| 欧美一级免费在线观看| 国产做a爰片久久毛片| 国产裸体写真av一区二区| 亚洲黄色影院| 男女私大尺度视频| 国产精品丝袜黑色高跟| 亚洲第一成年免费网站| 妖精一区二区三区精品视频| 欧美日韩一区二区欧美激情| 国产91精品在线播放| 在线播放av网址| 久久成人综合视频| 欧美国产亚洲另类动漫| 亚洲av成人精品一区二区三区在线播放| 理论片鲁丝二区爱情网| 自拍视频在线免费观看| 日日躁夜夜躁aaaabbbb| 免费网站看av| 91精品国产欧美一区二区18| 成人资源在线播放| 国产视频视频一区| 欧美xxxx黑人又粗又长| 精品国产乱码久久久久久果冻传媒| 国产九一视频| 欧美色区777第一页| 日韩黄色av网站| 国产超碰在线观看| 婷婷综合在线观看| 欧美日韩在线播放一区二区| xxx成人少妇69| 亚洲自拍都市欧美小说| 午夜精品久久久久| 欧美人体一区二区三区| 日韩精品久久一区二区三区| 国产麻豆午夜三级精品| 中文在线中文字幕| 免费一级特黄特色大片| 一个色在线综合| 国产精品美腿一区在线看| 亚洲免费毛片网站| 欧美日韩亚洲国产另类| 日本一区二区高清视频| 午夜久久福利影院| 欧美色图亚洲激情| 免费在线观看麻豆视频| 国产精品推荐精品| 免费看黄色网址| 国产一区二区在线视频| 欧美日韩国产成人| 自拍偷在线精品自拍偷无码专区| 成人免费91| 中文字幕激情视频| 精品久久在线| 国产99久久久久久免费看| 亚洲欧美成人一区二区三区| 在线满18网站观看视频| 久久国产精品免费一区二区三区| 久久久久成人精品无码中文字幕| 成人免费网视频| 久久久99国产精品免费| 欧美一级片中文字幕| 人妻91麻豆一区二区三区| 黄色片免费大全| 91精品国产91久久久久久青草| 午夜av入18在线| 亚洲电影影音先锋| 欧美三级电影一区| 色老板在线视频一区二区| 国产福利在线播放| 午夜免费福利在线| 91久久在线视频| 97人妻精品一区二区三区免费| 一级片免费在线播放| 免费在线看污片| 国产精品久久久久久一区二区| 亚洲午夜精品在线| 91免费公开视频| 水蜜桃在线免费观看| 久中文字幕一区| 国产精品久久久久久久久久久久久久久久| 国产精品伦一区二区| 女人在下体塞跳蛋在线观看| 日本免费黄色| 欧美极度另类videos高清| 亚洲精品欧美精品| 成年人二级毛片| 国产九色精品| 久久久久国色av免费观看性色| 中文字幕视频三区| 国产女人18毛片水18精品| 亚洲精品成人精品456| 国产一区在线视频| 亚洲精品成人影院| 91精品啪在线观看国产手机| 清纯唯美亚洲色图| 精品国内一区二区三区免费视频| 99精品国产高清一区二区麻豆| 精品一区二区在线观看视频| jizzjizz.con| 亚洲精品成人三区| 欧美成人高清电影在线| 免费看ww视频网站入口| 99久久亚洲一区二区三区青草| 中文在线√天堂| 天堂网av在线播放| 琪琪久久久久日韩精品| 欧美日韩国产一区在线| 色琪琪原网站亚洲香蕉| www.久久爱.cn| 午夜成人影视| 欧美一区国产在线| 九九热精品视频国产| 影音先锋中文字幕一区| 精品一区二区视频在线观看| 久久久com| 亚洲欧美成人vr| 亚洲最大成人网4388xx| 欧美一区二区三区在线观看免费| 色综合欧美在线视频区| 久久天堂夜夜一本婷婷麻豆| 处破女av一区二区| 日本精品性网站在线观看| 亚洲另类欧美自拍| 性欧美高清强烈性视频| 日本一区福利在线| www.成人在线视频| 欧美图片一区二区三区| 亚洲a∨一区二区三区| 欧美影院一区二区三区| 亚洲一区国产精品| 国产精品欧美亚洲| 香蕉视频黄色片| 91杏吧porn蝌蚪| 三年中国国语在线播放免费| 久久精品免视看国产成人| 妺妺窝人体色777777| 懂色aⅴ精品一区二区三区蜜月| 奇米777第四色| 国产精品免费看久久久无码| 在线观看电影av| 99亚洲男女激情在线观看| 欧美精品在线看| 久久黄色影院| 国产黄色在线播放| 精品免费囯产一区二区三区| 国产在线日韩在线| 亚洲欧美自拍偷拍色图| 久久九九久精品国产免费直播| 亚洲美女网站| 国产天堂亚洲国产碰碰| 免费成人美女在线观看.| 亚洲综合自拍网| 欧美羞羞视频| 日本а中文在线天堂| 久蕉在线视频| 亚洲av成人精品一区二区三区| 91久久国语露脸精品国产高跟| 中文字幕免费视频观看| 中文在线播放一区二区| 天堂综合在线播放| 99久久久无码国产精品性波多| 无码人妻aⅴ一区二区三区69岛| 久草这里只有精品视频|