日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

实现一个简易的RPC

發(fā)布時間:2025/3/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实现一个简易的RPC 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??點擊上方?好好學java?,選擇?星標?公眾號

重磅資訊、干貨,第一時間送達 今日推薦:用好Java中的枚舉,真的沒有那么簡單!個人原創(chuàng)+1博客:點擊前往,查看更多 作者:黃青石 鏈接:https://www.cnblogs.com/huangqingshi/p/12289820.html

之前寫了一些關于RPC原理的文章,但是覺得還得要實現一個。之前看到一句話覺得非常有道理,與大家共勉。不是“不要重復造輪子”,而是“不要發(fā)明輪子”,所以能造輪子還是需要造的。

這篇文章的梗概如下:

1. ?介紹一下這篇RPC的大致梗概。

2. ?說一下這篇文章需要的技術和實現。

3. ?用測試用例測試一下。

一、梗概

這篇RPC主要提示了服務注冊,服務發(fā)現,同步調用,異步調用,回調功能。這些功能已經足夠學習RPC使用了,對其中的原理就了解的非常清楚了。

二、技術和實現

采用的技術有Netty, Zookeeper, Protostuff, Spring,Cglib,Log4j這些基本就能夠達到這個功能。

Netty的作用就是用于客戶端向服務端發(fā)送請求,服務端接收請求后進行處理,Netty是一個基于異步事件處理的程序,客戶端和服務端采用的LengthFieldBasedFrameDecoder,這種解碼方法是最通用的,也就是把長度寫到數據包中,即 Length + Data,用這種解碼方法解決拆包粘包的問題。

Zookeeper的作用是用于服務的注冊,分布式解決方案中的很重要的一個工具。里邊主要做兩件事,一個是創(chuàng)建一個永久的節(jié)點,然后再永久的節(jié)點下邊創(chuàng)建臨時節(jié)點,用作服務的注冊,同時寫上對應的監(jiān)聽事件,如果服務下線或上線了,將進行服務上下線處理。

Protostuff是基于protoBuff的一種方案,這種方案可以在protoBuff的基礎上省去對應的.proto文件,這樣相對來講會更方便一些。它的主要作用是將數據進行序列化和反序列化,相對于JDK自帶的序列化方案,這種方案有更好更優(yōu)的處理效率。

Spring主要是因為最近項目都比較流行Spring, 所以需要將Spring結合起來,這樣才能更好的兼容大部分的工程,同時也了解一下Spring的各種機制,本篇主要采用的是自定義一個注解,然后將接口和方法添加上注解,添加好之后,在Spring啟動的時候,獲取該注解的類并且將其封閉到一個Map中,待后續(xù)使用。

Cglib的作用是動態(tài)代碼,客戶端將需要操作的接口類,方法,參數,參數進行進行封裝,然后序列化后發(fā)給服務端,服務端收到請求之后將結合注冊在Map中的Bean進行方法調用,采用的就是Cglib,關于動態(tài)代理我還寫過一篇文章

Log4j用于配置進行日志輸出。

接下來咱們一起看下代碼片段:

下邊的是Server的定義,里邊主要有兩個主要的功能,一個是Netty的初始化,采用上邊說的將長度寫到Length里邊, Length占4個字節(jié),剩下的就是數據。

效果如下,最大長度為64436即 64K,Length的長度為4個字節(jié)。將Request和Response進行解碼和編碼,這個含義是直接將實際的數據轉化為真實的Request。

* +------------+--------------------+* | Length | Actual Content |* | 0x00000C | "HELLO, WORLD" |* +------------+--------------------+

還有一個比較重要的就是在啟動初始化的時候,將注解RPCServer的類獲取且封裝起來,放到Map里邊用于后續(xù)的調用。

package com.hqs.server; import com.hqs.client.RPCClientHandler; import com.hqs.codec.RPCDecoder; import com.hqs.codec.RPCEncoder; import com.hqs.protocol.Request; import com.hqs.protocol.Response; import com.hqs.registry.ServiceDiscovery; import com.hqs.registry.ServiceRegistry; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NioServerSocketChannel; import io.netty.handler.codec.LengthFieldBasedFrameDecoder; import org.apache.commons.collections4.MapUtils; import org.springframework.beans.BeansException; import org.springframework.beans.factory.InitializingBean; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; public class RPCServer implements ApplicationContextAware, InitializingBean { private String serverAddress; private ServiceRegistry serviceRegistry; private Map<String, Object> handlerMap = new HashMap<>(); private static ThreadPoolExecutor threadPoolExecutor; private EventLoopGroup bossGroup = null; private EventLoopGroup workerGroup = null; public RPCServer(String serverAddress) { this.serverAddress = serverAddress;} public RPCServer(String serverAddress, ServiceRegistry serviceRegistry) { this.serverAddress = serverAddress; this.serviceRegistry = serviceRegistry;}@Override public void afterPropertiesSet() throws Exception {start();}@Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {Map<String, Object> serverBeanMap = applicationContext.getBeansWithAnnotation(RPCService.class); if(!MapUtils.isEmpty(serverBeanMap)) { for(Object serviceBean : serverBeanMap.values()) {String interfaceName = serviceBean.getClass().getAnnotation(RPCService.class).value().getName();handlerMap.put(interfaceName, serviceBean);}}} public void start() throws InterruptedException { if(bossGroup == null && workerGroup == null) {bossGroup = new NioEventLoopGroup();workerGroup = new NioEventLoopGroup();ServerBootstrap serverBootstrap = new ServerBootstrap();serverBootstrap.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class).childHandler(new ChannelInitializer<SocketChannel>() {@Override protected void initChannel(SocketChannel ch) throws Exception {ch.pipeline().addLast(new LengthFieldBasedFrameDecoder(65536, 0, 4, 0, 0)).addLast(new RPCDecoder(Request.class)).addLast(new RPCEncoder(Response.class)).addLast(new RPCServerHandler(handlerMap));}}).option(ChannelOption.SO_BACKLOG, 128).childOption(ChannelOption.SO_KEEPALIVE, true);String[] address = serverAddress.split(":");String host = address[0]; int port = Integer.parseInt(address[1]);ChannelFuture future = serverBootstrap.bind(host, port).sync();System.out.println("servier 啟動"); if(serviceRegistry != null) {serviceRegistry.register(serverAddress);}future.channel().closeFuture().sync();}} public static void submit(Runnable task) { if(threadPoolExecutor == null) { synchronized (RPCServer.class) { if(threadPoolExecutor == null) {threadPoolExecutor = new ThreadPoolExecutor(16, 16, 600L,TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(65536));}}}threadPoolExecutor.submit(task);} public RPCServer addService(String interfaceName, Object serviceBean) { if(!handlerMap.containsKey(interfaceName)) {handlerMap.put(interfaceName, serviceBean);} return this;} }

下面是異步調用接口和動態(tài)代理接口,用于進行接口異步調用,實現動態(tài)代理。

package com.hqs.proxy; import com.hqs.async.RPCFuture; public interface AsyncObjectProxy {RPCFuture call(String funcName, Object... args); }

client端的代理采用的是JDK的代理機制,在初始化ObjectProxy的時候,將需要代理的類傳入,這樣如果類在調用方法的時候,首先會調用里邊的invoke方法,這樣就可以在invoke里邊進行數據請求的初始化工作了。

package com.hqs.proxy; import com.hqs.ConnectionManager; import com.hqs.async.RPCFuture; import com.hqs.client.RPCClientHandler; import com.hqs.protocol.Request; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.util.UUID; public class ObjectProxy<T> implements InvocationHandler, AsyncObjectProxy{ private Class<T> clazz; public ObjectProxy(Class<T> clazz) { this.clazz = clazz;}@Override public RPCFuture call(String funcName, Object... args) {RPCClientHandler handler = ConnectionManager.getInstance().chooseHandler();Request request = createRquest(this.clazz.getName(), funcName, args);RPCFuture future = handler.sendRequest(request); return future;}@Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { if (Object.class == method.getDeclaringClass()) {String name = method.getName(); if ("equals".equals(name)) { return proxy == args[0];} else if ("hashCode".equals(name)) { return System.identityHashCode(proxy);} else if ("toString".equals(name)) { return proxy.getClass().getName() + "@" + Integer.toHexString(System.identityHashCode(proxy)) +", with InvocationHandler " + this;} else { throw new IllegalStateException(String.valueOf(method));}}Request request = new Request();request.setRequestId(UUID.randomUUID().toString());request.setClassName(method.getDeclaringClass().getName());request.setMethodName(method.getName());request.setParameters(args);Class[] parameterTypes = new Class[args.length]; for(int i = 0; i < args.length; i++) {parameterTypes[i] = getClassType(args[i]);}request.setParameterTypes(parameterTypes);System.out.println("requestId:" + request.getRequestId() + " className:" + request.getClassName());RPCClientHandler handler = ConnectionManager.getInstance().chooseHandler();RPCFuture future = handler.sendRequest(request); return future.get();} private Request createRquest(String className, String methodName, Object[] args) {Request request = new Request();request.setRequestId(UUID.randomUUID().toString());request.setClassName(className);request.setMethodName(methodName);request.setParameters(args);Class[] parameterTypes = new Class[args.length]; for(int i = 0; i < args.length; i++) {parameterTypes[i] = getClassType(args[i]);}request.setParameterTypes(parameterTypes);System.out.println("requestId:" + request.getRequestId() + " className:" + className); return request;} private Class<?> getClassType(Object obj) {Class<?> classType = obj.getClass();String typeName = classType.getName(); switch (typeName) { case "java.lang.Integer": return Integer.TYPE; case "java.lang.Long": return Long.TYPE; case "java.lang.Float": return Float.TYPE; case "java.lang.Double": return Double.TYPE; case "java.lang.Character": return Character.TYPE; case "java.lang.Boolean": return Boolean.TYPE; case "java.lang.Short": return Short.TYPE; case "java.lang.Byte": return Byte.TYPE;} return classType;} }

異步回調方法接口和異步處理類RPCFuture,該類實現了Future類,這個類里有的方法大家應該比較常用。cancel(), isCancelled(), isDone(), get(), get(long timeout, TimeUnit unit),其中get是同步調用,什么時候執(zhí)行完成之后什么時候繼續(xù)執(zhí)行后續(xù)操作,get(long timeout, TimeUnit unit)用于在某個時間內不給到回執(zhí)的話,將會不丟棄掉請求。

package com.hqs.async; public interface AsyncRPCCallback { void success(Object result); void fail(Exception e);} package com.hqs.async; import com.hqs.client.RPCClient; import com.hqs.protocol.Request; import com.hqs.protocol.Response; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.concurrent.locks.AbstractQueuedSynchronizer; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * 用于實現異步調用 */ public class RPCFuture implements Future<Object> { private Sync sync; private Request request; private Response response; private long startTime; private long responseTimeThreshold = 5000L; private List<AsyncRPCCallback> pendingCallbacks = new ArrayList<>(); private Lock lock = new ReentrantLock(); public RPCFuture(Request request) { this.sync = new Sync(); this.request = request; this.startTime = System.currentTimeMillis();}@Override public boolean cancel(boolean mayInterruptIfRunning) { return false;}@Override public boolean isCancelled() { throw new UnsupportedOperationException();}@Override public boolean isDone() { return sync.isDone();}@Override public Object get() throws InterruptedException, ExecutionException {sync.acquire(1); if(this.response != null) { return this.response.getResult();} return null;}@Override public Object get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { boolean success = sync.tryAcquireNanos(1, unit.toNanos(timeout)); if(success) { if(this.response != null) { return this.response.getResult();} return null;} return new RuntimeException("Timeout exception. Request id: " + this.request.getRequestId() + ". Request class name: " + this.request.getClassName() + ". Request method: " + this.request.getMethodName());} public void done(Response response) { this.response = response;sync.release(1);invokeCallbacks(); long responseTime = System.currentTimeMillis() - startTime; if(responseTime > responseTimeThreshold) {System.out.println("Service response time is too slow. Request id = " + response.getRequestId());}} private void invokeCallbacks() {lock.lock(); try { for( AsyncRPCCallback asyncRPCCallback : pendingCallbacks) {runCallback(asyncRPCCallback);}} finally {lock.unlock();}} public RPCFuture addCallback(AsyncRPCCallback callback) {lock.lock(); try { if(isDone()) {runCallback(callback);} else { this.pendingCallbacks.add(callback);}} catch (Exception e) {e.printStackTrace();} finally {lock.unlock();} return this;} private void runCallback(final AsyncRPCCallback callback) { final Response response = this.response;RPCClient.submit(new Runnable() {@Override public void run() { if(!response.isError()) {callback.success(response.getResult());} else {callback.fail(new RuntimeException("Response error", new Throwable(response.getError())));}}});} static class Sync extends AbstractQueuedSynchronizer { //future statusprivate final int done = 1; private final int pending = 0;@Override protected boolean tryAcquire(int arg) { return getState() == done;}@Override protected boolean tryRelease(int arg) { if(getState() == pending) { if(compareAndSetState(pending, done)) { return true;} else { return false;}} else { return true;}} public boolean isDone() { return getState() == done;}} }

服務的注冊和服務發(fā)現類,里邊包括了zk的連接,設置ZK的監(jiān)聽,創(chuàng)建永久節(jié)點和臨時節(jié)點。

package com.hqs.registry; import org.apache.zookeeper.*; import org.apache.zookeeper.data.Stat; import java.util.concurrent.CountDownLatch; public class ServiceRegistry { private CountDownLatch latch = new CountDownLatch(1); private String registryAddress; public ServiceRegistry(String registryAddress) { this.registryAddress = registryAddress;} public void register(String data) { if(data != null) {ZooKeeper zk = connectServer(); if(zk != null) {AddRootNode(zk);createNode(zk, data);}}} private ZooKeeper connectServer() {ZooKeeper zk = null; try {zk = new ZooKeeper(registryAddress, Constant.ZK_SESSION_TIMEOUT, new Watcher() {@Override public void process(WatchedEvent event) { if(event.getState() == Event.KeeperState.SyncConnected) {latch.countDown();}}});latch.await();} catch (Exception e) {e.printStackTrace();} return zk;} private void AddRootNode(ZooKeeper zk) { try {Stat s = zk.exists(Constant.ZK_REGISTRY_PATH, false); if(s == null) {zk.create(Constant.ZK_REGISTRY_PATH, new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);}} catch (Exception e) {e.printStackTrace();}} private void createNode(ZooKeeper zk, String data) { try { byte[] dataBytes= data.getBytes();String path = zk.create(Constant.ZK_DATA_PATH, dataBytes, ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL);System.out.println("createNode:path" + path + " data:" + data);} catch (Exception e) {e.printStackTrace();}} } package com.hqs.registry; import com.hqs.ConnectionManager; import org.apache.zookeeper.*; import java.util.ArrayList; import java.util.List; import java.util.concurrent.CountDownLatch; public class ServiceDiscovery { private CountDownLatch latch = new CountDownLatch(1); private volatile List<String> dataList = new ArrayList<>(); private String registryAddress; private ZooKeeper zooKeeper; public ServiceDiscovery(String registryAddress) { this.registryAddress = registryAddress;zooKeeper = connectServer(); if(zooKeeper != null) { try {watchNode(zooKeeper);} catch (Exception e) { try {watchNode(zooKeeper);} catch (Exception e1) {e1.printStackTrace();}}}} private ZooKeeper connectServer() {ZooKeeper zk = null; try {zk = new ZooKeeper(registryAddress, Constant.ZK_SESSION_TIMEOUT, new Watcher() {@Override public void process(WatchedEvent event) { if(event.getState() == Event.KeeperState.SyncConnected) {latch.countDown();}}});latch.await();} catch (Exception e ) {e.printStackTrace();} return zk;} private void watchNode(final ZooKeeper zk) { try {List<String> nodeList = zk.getChildren(Constant.ZK_REGISTRY_PATH, new Watcher() {@Override public void process(WatchedEvent event) { if(event.getType() == Event.EventType.NodeDataChanged) {watchNode(zk);}}});List<String> dataList = new ArrayList<>(); for(String node : nodeList) { byte[] bytes = zk.getData(Constant.ZK_REGISTRY_PATH + "/" + node, false, null);dataList.add(new String(bytes));} this.dataList = dataList;UpdateConnectServer();} catch (KeeperException | InterruptedException e) {e.printStackTrace();}} private void UpdateConnectServer() {ConnectionManager.getInstance().UpdateConnectedServer(dataList);} public void close() { if(zooKeeper != null) { try {zooKeeper.close();} catch (Exception e) {e.printStackTrace();}}}}

三、測試

大部分代碼功能已經在上邊描述了,當然還有很多細節(jié)需要了解,比如AQS,RentrantLock,Condition,這個需要自行了解一下。下邊咱們來看一下測試用例。

啟動zookeeper,然后啟動RPCBootServiceWithSpring,將下邊每個測試的類進行調用,依次是同步調用,異步調用,同步callback調用。

package com.hqs.spring; import com.hqs.HelloService; import com.hqs.async.AsyncRPCCallback; import com.hqs.async.RPCFuture; import com.hqs.client.RPCClient; import com.hqs.proxy.AsyncObjectProxy; import com.hqs.registry.ServiceDiscovery; import org.junit.After; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit;@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath:client.xml") public class ServiceTest { private static final Logger logger = LoggerFactory.getLogger(ServiceTest.class);@Autowired private RPCClient rpcClient;@Test public void syncTest() {HelloService helloService = rpcClient.create(HelloService.class);String result = helloService.sayHi("hqs");System.out.println(result);Assert.assertEquals("Hi hqs", result);}@Test public void asyncInvokeTest() {ServiceDiscovery serviceDiscovery = new ServiceDiscovery("127.0.0.1:2181");RPCClient rpcClient = new RPCClient(serviceDiscovery);AsyncObjectProxy asyncClient = rpcClient.createAsync(HelloService.class);RPCFuture future = asyncClient.call("sayHi", "hqs"); try {String result = (String) future.get(5, TimeUnit.SECONDS);Assert.assertEquals("Hi hqs", result);System.out.println(result);} catch (Exception e) {e.printStackTrace();}}@Test public void syncCallbackTest() {ServiceDiscovery serviceDiscovery = new ServiceDiscovery("127.0.0.1:2181");RPCClient rpcClient = new RPCClient(serviceDiscovery);AsyncObjectProxy asyncClient = rpcClient.createAsync(HelloService.class);RPCFuture future = asyncClient.call("sayHi", "hqs"); final CountDownLatch latch = new CountDownLatch(1);future.addCallback(new AsyncRPCCallback() {@Override public void success(Object result) {System.out.println("result:" + result.toString());Assert.assertEquals("Hi hqs", result);latch.countDown();}@Override public void fail(Exception e) {System.out.println("fail:" + e.getMessage());latch.countDown();}}); try {latch.await();} catch (Exception e) {e.printStackTrace();}}@After public void setTear() { if (rpcClient != null) {rpcClient.stop();}} } ![](https://img2018.cnblogs.com/i-beta/1236784/202002/1236784-20200210123031597-125855471.png)

運行上邊的結果都通過了,說明能正常運行。

如果想要看更詳細的代碼訪問:https://github.com/stonehqs/MyNettyRpc

歡迎指正。

總結

以上是生活随笔為你收集整理的实现一个简易的RPC的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

在线黄色av电影 | 日日爱影视 | 福利视频网址 | 99久久久久久久久 | 九九热99视频 | 精品久久久久久久久久久久久久久久 | 91大神电影 | 国产精品毛片久久 | 国产白浆视频 | 国产香蕉97碰碰久久人人 | 99热国内精品 | 国产一级片久久 | 国产精品久久久久久久久久久久午夜片 | 在线免费看片 | www欧美色| www.黄色片网站 | 久热av| 国产精品va在线 | 99国产精品久久久久久久久久 | 射久久 | 亚洲精品国产精品国自产观看 | 91手机电影 | 中文字幕一区三区 | 中文有码在线视频 | 色综合亚洲精品激情狠狠 | 久草在线观看视频免费 | 欧美九九视频 | 成人免费网站在线观看 | 免费在线观看黄网站 | 亚洲女人av| 日本中文字幕系列 | 国产精品色婷婷 | 欧美成人h版在线观看 | 国产手机av在线 | www.久草视频 | 欧美国产一区在线 | 亚洲高清在线视频 | 久久久久夜色 | 色婷婷九月 | 日韩在线国产精品 | 色小说在线 | 黄色av一级片 | 亚洲成a人片综合在线 | 波多野结衣电影一区二区三区 | 色狠狠干 | 欧美日韩国产精品一区二区 | 亚洲欧洲日韩在线观看 | 天天色天天色天天色 | 日韩精品久久久久久久电影竹菊 | 视频高清 | 另类老妇性bbwbbw高清 | 99精品久久99久久久久 | av日韩中文| 狠狠狠狠狠狠狠狠 | 久久婷婷色综合 | 九九免费观看全部免费视频 | 97综合网| 日韩高清免费在线观看 | 午夜骚影 | 日韩在线观看的 | 一色屋精品视频在线观看 | 久久激情视频网 | 久久精品国产亚洲aⅴ | 51久久夜色精品国产麻豆 | 精品国产一区二区三区四区在线观看 | 91中文字幕视频 | 日韩网站免费观看 | 蜜桃麻豆www久久囤产精品 | 国产精品久久久久久久久久直播 | 99久久综合狠狠综合久久 | 久久久久日本精品一区二区三区 | 500部大龄熟乱视频使用方法 | 久久精品99国产精品日本 | 国产视频在线免费观看 | 国内精自线一二区永久 | 午夜黄色大片 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 免费视频一二三区 | 日韩资源在线观看 | 久久亚洲电影 | 在线免费观看黄色 | 天天操人人干 | 精品一区精品二区高清 | 久久一级电影 | 久久日韩精品 | 久久精品国产一区二区电影 | 97超视频| 国产精品久久久久婷婷二区次 | 日本黄色免费在线 | 18pao国产成视频永久免费 | 国产高清视频在线观看 | 99热精品视 | 国产精品毛片完整版 | 在线视频欧美精品 | 国产精品福利一区 | 成人精品一区二区三区中文字幕 | 黄色影院在线免费观看 | 亚洲欧洲国产日韩精品 | 婷婷国产在线 | 天天插天天射 | 97精品免费视频 | 日韩av影视| 91在线小视频 | 日韩在线观看免费 | 国产小视频在线观看 | 美女网站色 | 在线视频欧美精品 | 夜色成人网 | 日韩精品网址 | av免费高清观看 | av天天澡天天爽天天av | 丁香综合激情 | 黄色大全视频 | 国产一区二区在线免费 | 成人h在线播放 | 91久久国产自产拍夜夜嗨 | 在线免费av网 | 亚洲精品久久久蜜臀下载官网 | 色吊丝在线永久观看最新版本 | 超碰在线9 | 夜夜视频 | 人人搞人人爽 | 7777xxxx| 天天操夜夜操国产精品 | www免费网站在线观看 | 亚洲最新av在线网站 | 久草成人在线 | 欧美美女激情18p | 成人黄色免费观看 | 精品国产精品久久一区免费式 | 欧美91精品久久久久国产性生爱 | 国产剧情久久 | 欧美男男tv网站 | 91色吧| 日本视频精品 | 人人狠 | 日韩精品一区二区三区丰满 | 欧美一区二区三区四区夜夜大片 | 激情电影在线观看 | 久久这里只有精品首页 | 伊人夜夜 | 国产无套一区二区三区久久 | 最近中文字幕完整视频高清1 | 国产精品免费av | 福利区在线观看 | 欧美日韩一区久久 | 一区二区丝袜 | 激情综合一区 | 激情av资源 | 欧美福利精品 | 久久午夜精品视频 | 日韩欧美视频在线观看免费 | 中文字幕 二区 | 少妇资源站 | 又色又爽的网站 | 国产在线观看不卡 | 日韩av免费网站 | 国产精品毛片一区二区三区 | 中文字幕精品一区久久久久 | 亚洲午夜大片 | 9色在线视频 | 在线免费黄 | 综合久久影院 | 在线一区二区三区 | 波多野结衣在线观看一区二区三区 | 成年人网站免费在线观看 | 午夜天使| 欧美色婷 | 天天曰天天干 | 高清av中文在线字幕观看1 | 粉嫩av一区二区三区免费 | 久久最新视频 | 国内精品久久久久久久久久 | 在线中文字母电影观看 | 最新日本中文字幕 | 18性欧美xxxⅹ性满足 | 国产黄大片在线观看 | 久久天天躁狠狠躁亚洲综合公司 | 免费网站看v片在线a | 国产又粗又猛又黄又爽 | 欧美日韩在线免费观看视频 | 综合中文字幕 | 国产精品系列在线播放 | 成人毛片a | 九九99视频 | 日韩免费电影网站 | 天天操天天色综合 | 在线一区电影 | 日韩欧美精品一区二区 | 精品国产三级a∨在线欧美 免费一级片在线观看 | 国产91精品一区二区麻豆网站 | 黄色91在线| 一区在线观看 | 国产小视频你懂的 | 日韩aⅴ视频 | 91私密视频| 成人黄色片在线播放 | 91一区啪爱嗯打偷拍欧美 | 国产日韩av在线 | 激情视频91| 成人黄性视频 | 亚洲精品日韩一区二区电影 | 黄色在线看网站 | 四虎成人免费观看 | 国产成人专区 | 99综合影院在线 | 黄色成人av在线 | 91三级视频 | 精品国产一区二区三区久久久蜜月 | 激情影音| 久久久久久国产精品免费 | zzijzzij亚洲成熟少妇 | 亚洲高清视频一区二区三区 | 在线观看免费日韩 | 人人射人人澡 | 国产专区在线看 | 黄色影院在线免费观看 | 视频国产一区二区三区 | www91在线观看 | 日韩免费观看一区二区 | 亚洲精品美女视频 | 日韩在线精品一区 | 国产区欧美 | 97超碰色| 日韩在线观看视频免费 | 久久成人一区二区 | 久日精品 | 毛片888 | 久久婷婷开心 | 色视频网站在线观看一=区 a视频免费在线观看 | 欧美精品在线免费 | 国产视频日本 | 极品久久久久久久 | 91大神精品视频在线观看 | 久久久久久久久久久黄色 | 国产精品久久久久9999 | 日韩在线观看视频网站 | 欧美日韩一区二区三区在线观看视频 | 久久久激情网 | 天天久久综合 | 成人av在线网址 | 一级做a视频 | 久久久久久国产精品999 | 欧美一二区视频 | 狠狠狠狠狠狠狠 | 99免费在线 | 91九色国产蝌蚪 | 亚洲欧美国产精品18p | 欧美精品久久99 | 国产高清av免费在线观看 | 亚洲久草网| 久久久午夜精品理论片中文字幕 | 国产精品一区二区在线 | 韩国av一区二区三区在线观看 | 97av超碰 | 久草视频网 | 91av片| 国产福利一区二区在线 | 91豆花在线 | 免费在线观看a v | 一区二区精品久久 | 欧美日韩视频 | 天天鲁一鲁摸一摸爽一爽 | 国产国语在线 | 久久毛片网站 | 亚洲精品在线二区 | 亚洲国产成人久久 | 亚洲手机av | 成 人 黄 色 视频播放1 | 日韩电影一区二区在线 | 久久论理 | www黄色大片 | 久久久久久高潮国产精品视 | 正在播放一区 | 西西44人体做爰大胆视频 | av中文资源在线 | 91久久偷偷做嫩草影院 | 国产精国产精品 | 中文字幕在线观看第三页 | 成人免费观看电影 | 国产精品www | 超碰人人超碰 | 国精产品999国精产品视频 | 在线中文字幕观看 | 日韩欧美高清在线观看 | 国产精品成人一区二区 | 丝袜av一区 | 亚洲成年人在线播放 | 中文字幕一区二区三区四区久久 | 4p变态网欧美系列 | 欧美久久九九 | 天天干人人| 五月天综合色激情 | 久久久国产日韩 | 成人精品亚洲 | 成人网444ppp| 久久超| 免费在线观看av不卡 | 国产精品无av码在线观看 | 国产96av| 欧美日韩裸体免费视频 | 国产成人精品久久久 | 麻豆久久精品 | 久久精品99国产精品酒店日本 | 日韩手机视频 | 蜜臀av在线一区二区三区 | 偷拍精偷拍精品欧洲亚洲网站 | 五月婷香蕉久色在线看 | 91精品婷婷国产综合久久蝌蚪 | 日韩精品免费 | 久久艹在线观看 | 欧美日韩在线视频一区二区 | 欧美激情综合网 | 久久久久久久久毛片 | 日韩av电影网站在线观看 | 丝袜美女视频网站 | av丝袜制服 | 久久精品视频日本 | 欧美日韩亚洲精品在线 | 精品久久久久久久久中文字幕 | 亚洲欧美乱综合图片区小说区 | 在线 高清 中文字幕 | 久久高清视频免费 | 九九国产精品视频 | 国产精品va在线观看入 | 一本一本久久aa综合精品 | 亚洲性视频| 超碰97人人在线 | 国产美女在线免费观看 | 91在线播放国产 | 婷婷激情综合五月天 | 在线小视频 | 国产视频 亚洲精品 | 欧美激情一区不卡 | 中文字幕免费观看全部电影 | 国产在线va | www夜夜操com| 中文字幕视频三区 | 久久国产精品视频观看 | 久久久免费播放 | 国产短视频在线播放 | 日韩精品1区2区 | 天天操天天添 | 91黄色成人| 国产露脸91国语对白 | 99热亚洲精品 | 国产精品久久免费看 | 欧美激情视频久久 | av中文字幕在线免费观看 | 日本xxxx裸体xxxx17 | 日韩欧美电影网 | 亚洲成人免费在线观看 | 国产精品久久久久永久免费观看 | 国内99视频 | 最新av在线免费观看 | 久久香蕉国产精品麻豆粉嫩av | 国产精品久久久久一区二区三区 | 亚洲成av人片在线观看www | 日韩精品久久久久久久电影竹菊 | 成人免费共享视频 | 91高清视频在线 | 精品国产黄色片 | 91超级碰 | 亚洲 欧洲 国产 日本 综合 | 91久草视频 | 国产91粉嫩白浆在线观看 | 中文字幕中文字幕在线中文字幕三区 | 成人国产在线 | av中文字幕在线播放 | 五月在线| 亚洲综合色视频在线观看 | 日日夜夜天天综合 | 国产精品手机看片 | 91亚洲欧美 | 久久精品国产免费看久久精品 | 精品福利在线视频 | 99久久精品一区二区成人 | 在线看国产视频 | 天堂av免费| 91正在播放| 三级小视频在线观看 | 日韩欧美一区二区三区免费观看 | 国产网红在线观看 | 国产精品久久久久久久av电影 | 免费能看的黄色片 | www.国产在线视频 | 91一区啪爱嗯打偷拍欧美 | 主播av在线 | 色播六月天 | 九九热中文字幕 | 国产视频在线观看一区 | 天天干天天射天天爽 | 亚洲香蕉在线观看 | 99久久精品免费 | 日韩美女黄色片 | 色资源中文字幕 | 成人在线网站观看 | 欧美性生活免费 | 久久久久免费精品视频 | 一区二区三区在线电影 | 国产精品日韩高清 | 深爱综合网 | 日本久久免费电影 | 欧美日韩免费一区 | 狠狠操狠狠干天天操 | 久久国产亚洲视频 | 国产成人久久77777精品 | 久久久久一区二区三区四区 | 国产一区二区精品久久91 | 久久99免费视频 | 一本一道久久a久久精品 | www一起操| 热99在线视频 | h视频在线看 | 九九视频热 | 91视频亚洲 | 久久久av电影 | 日本精品视频免费 | 四虎成人精品永久免费av | 亚洲午夜精品久久久久久久久久久久 | 91av视频导航 | 日韩视频1区 | 久久精品99久久 | 91麻豆网| 精品国产中文字幕 | 久久久久婷 | 国产成人精品一区二区三区 | 欧美一级性生活视频 | 久久福利小视频 | 首页国产精品 | 久久久久久国产精品免费 | 欧美精品九九99久久 | 欧美性生活久久 | 欧美最新大片在线看 | 毛片网站在线看 | 国产色爽 | 日韩午夜大片 | 91在线免费看片 | 婷婷在线免费视频 | 在线观看一区二区精品 | 国产污视频在线观看 | 日女人免费视频 | www.亚洲| 国产精品久久久久一区二区 | 激情网五月婷婷 | 久久久午夜剧场 | 国内精品久久久久 | 日韩欧美高清视频在线观看 | 亚洲少妇自拍 | 国内精品视频在线 | 蜜臀av网址 | 久久在线精品 | 亚洲一区精品人人爽人人躁 | 久久久久久蜜桃一区二区 | 顶级bbw搡bbbb搡bbbb | 亚洲年轻女教师毛茸茸 | 九九热在线观看 | 69久久久 | 亚洲成人免费在线观看 | 国产一级片一区二区三区 | 婷婷深爱网 | 亚洲午夜大片 | 日韩一区二区在线免费观看 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 91成人天堂久久成人 | 在线成人观看 | 国产精品美女久久久免费 | 人人舔人人舔 | 亚洲精品中文字幕在线 | 亚洲人人av | 久久伊人国产精品 | 欧美精品久久久久久久久久丰满 | 亚洲蜜桃在线 | 97超碰伊人 | 最新av观看 | 99热官网| 亚州国产视频 | 精品国产一区二 | 欧美a在线免费观看 | av一级网站| 国产乱码精品一区二区蜜臀 | 久久久国产精品视频 | 九九热re| 国产淫片 | 国产视频欧美视频 | 久久午夜免费视频 | 日本电影黄色 | 欧美做受高潮电影o | 超碰在线资源 | 五月婷婷天堂 | 性色大片在线观看 | 日韩免费区 | 97在线视频免费播放 | 成人性生交大片免费观看网站 | 麻豆国产在线视频 | 亚洲一区二区三区在线看 | 97色噜噜 | 成人教育av | 婷婷综合久久 | 九九99| 日韩一级黄色av | av丝袜天堂 | av在线一级 | 日日夜夜狠狠操 | 久久久久一区二区三区四区 | 日b视频在线观看网址 | 日韩中文字幕免费在线观看 | 亚洲精品国产高清 | 一区二区三区手机在线观看 | 欧美日韩一区二区久久 | 91在线麻豆 | 久久九九网站 | 我要色综合天天 | 一性一交视频 | 一级欧美黄| 国产免费大片 | 国产呻吟在线 | 日韩69av | 99热在线国产精品 | 国产 在线观看 | 久久综合九色综合97_ 久久久 | 成人黄色在线 | 亚洲成人av片在线观看 | 婷婷中文字幕 | 免费高清在线观看成人 | 激情av在线资源 | 欧美成年网站 | 中文字幕日本电影 | 亚洲久草网 | 日韩欧美国产激情在线播放 | 日韩午夜电影网 | 91精品视频网站 | 99精品久久99久久久久 | 黄色午夜| 国产三级视频在线 | 69视频在线播放 | 操操色 | 婷婷资源站 | 亚欧洲精品视频在线观看 | 久久久国产一区二区三区四区小说 | 亚洲综合色婷婷 | 黄色av电影一级片 | 精品亚洲视频在线观看 | 伊人天天狠天天添日日拍 | 亚洲国产精品久久 | 午夜手机看片 | 国产在线播放观看 | 成人免费观看网站 | 日韩在线视频一区二区三区 | 在线观看av免费观看 | 久久av免费 | 日韩系列在线观看 | 一区二区三区在线电影 | 玖玖在线看 | 欧美激情精品一区 | 亚洲高清网站 | 久久国产精品99国产精 | 久草影视在线观看 | av在线电影免费观看 | 国产视频一区二区三区在线 | 91看片淫黄大片在线播放 | 蜜臀久久99精品久久久无需会员 | 国产一二区免费视频 | 毛片激情永久免费 | 丝袜制服天堂 | 狠狠干,狠狠操 | www.亚洲精品视频 | 国产91对白在线 | 国产精品成人a免费观看 | 久久在线看| 黄免费在线观看 | 精品一区91 | 日韩av福利在线 | 欧美日韩精品电影 | 青春草视频在线播放 | 日韩美精品视频 | 精品福利国产 | 五月天婷婷综合 | 日本中文字幕在线观看 | 97国产在线观看 | 天堂在线v | 午夜色大片在线观看 | 国产精品美女网站 | 亚洲精品理论 | 超碰公开在线观看 | 91高清免费| 国产裸体永久免费视频网站 | 九精品 | 99riav1国产精品视频 | 婷婷色网视频在线播放 | 国产中的精品av小宝探花 | 久久人91精品久久久久久不卡 | 欧美一级性生活视频 | 粉嫩av一区二区三区免费 | 精品国产综合区久久久久久 | 97精品国产97久久久久久久久久久久 | 欧美精品一二 | 97网在线观看 | 久久夜色精品国产欧美乱极品 | 精品电影一区二区 | 国产成人一二片 | 国产精品私人影院 | 成人h动漫精品一区二 | 狠狠色噜噜狠狠狠 | 午夜少妇 | 射射色 | 久久国产精品精品国产色婷婷 | 九九综合久久 | 久久久久久麻豆 | 亚洲最大激情中文字幕 | 久久一区二区三区日韩 | 欧美日韩p片 | 欧美激情视频久久 | 国产精品久久久久一区二区三区共 | 久久国产一区 | 黄色不卡av | 在线视频观看你懂的 | 在线 你懂 | 日韩一区二区三区在线观看 | 亚洲精品玖玖玖av在线看 | 一级特黄aaa大片在线观看 | 国产婷婷久久 | 国产精品色视频 | av不卡网站| 成人av电影在线 | 亚洲国产免费看 | 国产精品久久99综合免费观看尤物 | 黄色资源在线观看 | 中文字幕美女免费在线 | 国产在线毛片 | 九九热免费精品视频 | 精品久久久久一区二区国产 | 91av中文 | 国产精品18videosex性欧美 | 国产精品麻豆免费版 | 黄色的视频网站 | 国产精品久久久久久久久久三级 | 国产精品久久久久久久久久白浆 | 中文字幕在线播放一区 | 国产视频九色蝌蚪 | 午夜精品久久久久久久久久久久久久 | 婷婷在线不卡 | 欧美日韩亚洲在线 | 免费黄色av | 国产高清久久久久 | 国产精品美女久久久久久免费 | 国产精品久久久久免费观看 | 在线成人免费 | 婷婷国产视频 | 亚洲影音先锋 | 毛片网站在线观看 | 日韩视频免费 | 国产白浆视频 | 91理论片午午伦夜理片久久 | 国产精品一区二区av日韩在线 | 亚州国产视频 | 特片网久久 | 亚洲精品男人天堂 | 日本丰满少妇免费一区 | 91久色蝌蚪 | 亚洲免费在线视频 | 激情小说网站亚洲综合网 | 久久国产精品一区二区 | 免费在线一区二区三区 | 久久国产精品网站 | 一区二区三区在线观看免费 | 色婷婷av国产精品 | 深夜国产福利 | 超碰97中文 | av福利网址导航大全 | 开心色激情网 | www.久久色 | 久久久久久久久久久久国产精品 | 欧美激情第十页 | 97超碰资源网 | 九九电影在线 | 美女在线黄 | 亚洲激情五月 | 狠狠色狠狠色综合日日小说 | 亚洲天天做 | 亚洲午夜久久久久久久久久久 | 麻豆视频免费观看 | 久草热久草视频 | 日韩sese| 伊人开心激情 | 精品国产午夜 | www.黄色网.com | 精品国产亚洲一区二区麻豆 | 日韩91精品 | 特黄色大片 | 午夜精品久久久久久中宇69 | 免费av 在线| 一区二区不卡 | 色婷婷av国产精品 | 日韩免费网址 | 亚洲成免费 | 欧美黑吊大战白妞欧美 | www.午夜视频 | 99色资源| 欧洲精品码一区二区三区免费看 | 久久综合免费视频 | 99久久久国产精品 | 在线观看一区 | 在线黄色免费av | 国产a视频免费观看 | 国产91成人 | 亚洲一区二区三区在线看 | 国产91粉嫩白浆在线观看 | 欧美一区二区免费在线观看 | 99精品国产99久久久久久福利 | 日韩精品91偷拍在线观看 | 婷婷5月激情5月 | 久久精品伊人 | 在线你懂 | 特级免费毛片 | 亚洲视频大全 | 久久久久久久久久久福利 | 亚洲午夜久久久久久久久电影网 | 精品一区二区三区四区在线 | 久草久草在线 | 国产视频99| 亚洲精品免费观看视频 | 91精品国产高清自在线观看 | 伊人中文网 | 特黄特黄的视频 | 91污在线观看 | 在线免费观看av网站 | 99热这里只有精品久久 | 久久综合激情 | 91看片淫黄大片91 | 久久综合色播五月 | 亚在线播放中文视频 | 亚洲精品五月 | 精品久久在线 | 超碰免费成人 | 国产一区二区三区四区在线 | 国产精品久久久久久久免费 | 免费视频a | www国产在线 | 国产aa精品 | 91刺激视频| 少妇搡bbbb搡bbb搡aa | 中文字幕在线观看视频网站 | 香蕉手机在线 | 国产精品久久久久久久毛片 | 黄色免费观看视频 | 成人四虎影院 | 欧女人精69xxxxxx | 亚洲激情p | 日韩欧美在线视频一区二区三区 | 精品久久精品 | 国产精品久久久影视 | 亚洲综合在线观看视频 | 亚洲精品午夜一区人人爽 | www.午夜色.com | 在线香蕉视频 | 亚洲欧美观看 | 久久精品国产亚洲a | 在线综合 亚洲 欧美在线视频 | 日本福利视频在线 | 久久短视频 | 中文字幕免 | 午夜久草| 日本黄色大片免费看 | 日韩免费在线视频观看 | 免费观看国产精品视频 | 久久精品国产一区 | 视频在线观看亚洲 | 久久国产精品免费一区二区三区 | 国产日韩在线播放 | 九九热精品视频在线播放 | 黄色网址av| 国产精品毛片一区二区三区 | 成人黄色在线观看视频 | 一区二区三区久久 | 国产色视频一区二区三区qq号 | 免费观看91视频 | 日韩一级电影在线观看 | 国产免费观看久久黄 | 亚洲一区二区三区四区精品 | 成人在线免费观看网站 | 五月天电影免费在线观看一区 | 日本深夜福利视频 | 91视频88av| 成人午夜电影网 | 中文字幕在线免费97 | 人人操日日干 | 在线成人一区 | 在线免费看黄色 | 久久免视频 | 婷婷爱五月天 | 国产一级视频 | va视频在线观看 | 五月开心综合 | 992tv成人免费看片 | 亚洲精品国产高清 | 精品福利网站 | 黄免费在线观看 | 国产精品va | 国产在线超碰 | 91精品国产高清自在线观看 | 婷婷色在线播放 | 99久久爱| 久久久www成人免费精品张筱雨 | 精品福利在线 | 久久久久久久久黄色 | 婷婷视频在线播放 | 97超碰在线资源 | 狠狠色伊人亚洲综合成人 | 国产精品麻豆视频 | 一级黄色免费网站 | 中文字幕第 | 久草在线视频看看 | 午夜手机电影 | 99久久久久久 | av资源中文字幕 | 在线免费观看黄色 | av理论电影| 高清av影院| 97精品在线 | 麻豆精品国产传媒 | www.亚洲精品在线 | 欧美日韩国产色综合一二三四 | 国产成人精品三级 | 欧美a级免费视频 | 日韩高清国产精品 | 夜夜操天天 | 国产原创91 | 成年在线观看 | 久久人人97超碰com | 91看片淫黄大片一级在线观看 | 91免费看黄| www色综合 | 亚洲国产精品va在线 | 久久精品视频网址 | av色综合网 | 91精品视频一区二区三区 | 永久免费在线 | 日韩在线观看一区二区 | 天天爽夜夜爽精品视频婷婷 | 香蕉在线视频播放网站 | 在线免费观看涩涩 | 久久久久久久久福利 | 91精品视频免费在线观看 | 天天操夜夜曰 | 少妇bbb搡bbbb搡bbbb | 中文字幕在线播放日韩 | 婷婷综合久久 | 久久精品99国产国产精 | 黄色一级片视频 | 欧美日韩另类在线观看 | 亚洲精品久久久久久久不卡四虎 | 国产欧美精品在线观看 | 最新精品视频在线 | 久久久久久美女 | 99视频导航 | 色视频网站在线观看一=区 a视频免费在线观看 | 天天爽天天爽天天爽 | 三级av网站 | 精品国产激情 | 在线免费av网 | 91亚洲精品乱码久久久久久蜜桃 | 久久精品国产亚洲精品2020 | 狠色狠色综合久久 | 久久久www成人免费毛片 | 美女免费电影 | 99色在线| 久久精品亚洲一区二区三区观看模式 | 久久久国产精品一区二区三区 | 人人澡人摸人人添学生av | 欧美日韩中文在线 | 国产午夜精品一区二区三区嫩草 | 欧美午夜精品久久久久久浪潮 | 亚洲成人xxx | 毛片网在线 | 天天曰天天爽 | 视频在线亚洲 | 成人高清在线观看 | 国产精品久久久久久久久久久免费看 | 中文在线免费看视频 | 国产精品日韩在线播放 | 久久久国产一区二区 | 啪啪免费观看网站 | 黄色免费在线视频 | 久久久久成人精品免费播放动漫 | 国产精品 日韩精品 | 中文字幕第一 | a在线一区 | 成人久久18免费网站图片 | www.成人精品 | 免费看成人 | 最近字幕在线观看第一季 | 日本久久久久久久久久 | 日韩在线免费看 | 国产日韩欧美视频 | 日本韩国精品一区二区在线观看 | 国产手机在线视频 | 91黄色在线视频 | 97精品国产97久久久久久久久久久久 | 午夜在线免费视频 | 国产精品一区二区久久精品爱微奶 | 久香蕉 | 久久a v视频| 久久精品黄| 国产精品九九久久久久久久 | 色av婷婷| 在线国产不卡 | 在线国产能看的 | 在线黄色观看 | 麻花传媒mv免费观看 | 缴情综合网五月天 | 天天躁日日躁狠狠躁av麻豆 | 在线国产高清 | 久久伊人国产精品 | 国产精品一区二区久久 | 黄色中文字幕在线 | 丁香资源影视免费观看 | 国产午夜精品av一区二区 | 成人免费视频网站 | 亚洲欧洲日韩在线观看 | 欧美一级特黄aaaaaa大片在线观看 | 久久69精品久久久久久久电影好 | 国产破处精品 | 国产成人综合在线观看 | 日本精品视频在线播放 | 五月天激情综合网 | 超碰九九| 欧美日韩国产二区 | 国产成人精品久 | 日韩成人免费在线观看 | 国产黄色精品 | 天天操狠狠操网站 | 国产日韩欧美在线观看 | 色综合 久久精品 | 日韩电影在线观看一区二区 | 亚洲精品456在线播放第一页 | 国产精品自产拍在线观看蜜 | 日韩久久精品一区二区 | 波多野结衣视频一区二区 | a级片网站 | 国产日产精品一区二区三区四区的观看方式 | 久久精品99国产精品日本 | 久久午夜影视 | 337p日本大胆噜噜噜噜 | 国产精品普通话 | 午夜精品久久久久久中宇69 | 亚洲 欧美 另类人妖 | 国产精品片 | 日韩在线中文字幕视频 | 久久人人爽人人片av | 欧美日韩高清国产 | 亚洲精品永久免费视频 | 色婷婷成人网 | 久久国产综合视频 | 国产成人香蕉 | 久草精品视频在线观看 | 久久精品中文视频 | 奇米影视8888在线观看大全免费 | 91麻豆精品国产91久久久更新时间 | www.久久成人 | 天天搞夜夜骑 | 97在线观看免费观看 | 免费久久久久久 | 97韩国电影 | 黄视频网站大全 | 欧美一级特黄aaaaaa大片在线观看 | 在线观看av大片 | 91成人破解版 | 一级黄色大片 | 四虎成人精品在永久免费 | 狠狠地操 | 日韩大片在线免费观看 | 国内精品久久久久国产 | 国产永久免费 | 在线观看亚洲专区 | 韩日电影在线 | 69国产盗摄一区二区三区五区 | 日韩视频一区二区在线 | 国产视频1区2区 | 日韩欧美视频在线免费观看 | 操操色| 91精品国产91久久久久福利 | 91亚色视频在线观看 | 99久久这里有精品 | 黄色片视频免费 | 亚洲自拍偷拍色图 | 久久国产露脸精品国产 | 四虎最新域名 | 亚洲黄色激情小说 | 亚洲闷骚少妇在线观看网站 | 久久在线观看 | caobi视频| 91麻豆网站 | 天天干天天拍天天操天天拍 | 在线视频 精品 | 欧美国产日韩在线观看 | 4p变态网欧美系列 | 久久精品国产免费看久久精品 |