五月天激情丁香,国产精品2019,国产成人精品亚洲2020,国产精品免费视频一区二区三区,开心久久婷婷综合中文字幕,天堂视频在线观看免费完整版

EasySwoole RPC

很多傳統的 Phper 并不懂 RPC 是什么,RPC 全稱 Remote Procedure Call,中文譯為 遠程過程調用,其實你可以把它理解為是一種架構性上的設計,或者是一種解決方案。

例如在某龐大商場系統中,你可以把整個商場拆分為 N 個微服務(理解為 N 個獨立的小模塊也行),例如:

  • 訂單系統
  • 用戶管理系統
  • 商品管理系統
  • 等等

那么在這樣的架構中,就會存在一個 API 網關 的概念,或者是叫 服務集成者。我的 API 網關 的職責,就是把一個請求,拆分成 N 個小請求,分發到各個小服務里面,再整合各個小服務的結果,返回給用戶。例如在某次下單請求中,那么大概發送的邏輯如下:

  • API 網關接受請求
  • API 網關提取用戶參數,請求用戶管理系統,獲取用戶余額等信息,等待結果
  • API 網關提取商品參數,請求商品管理系統,獲取商品剩余庫存和價格等信息,等待結果
  • API 網關融合用戶管理系統、商品管理系統的返回結果,進行下一步調用(假設滿足購買條件)
  • API 網關調用用戶管理信息系統進行扣款,調用商品管理系統進行庫存扣減,調用訂單系統進行下單(事務邏輯和撤回可以用 請求 id 保證,或者自己實現其他邏輯調度)
  • API 網關返回綜合信息給用戶

而在以上發生的行為,就稱為 遠程過程調用。而調用過程實現的通訊協議可以有很多,比如常見的 HTTP 協議。而 EasySwoole RPC 采用自定義短鏈接的 TCP 協議實現,每個請求包,都是一個 JSON,從而方便實現跨平臺調用。

全新特性

  • 協程調度
  • 服務自動發現
  • 服務熔斷
  • 服務降級
  • Openssl 加密
  • 跨平臺、跨語言支持
  • 支持接入第三方注冊中心

安裝

composer require easyswoole/rpc=4.x

執行流程

服務端:
注冊RPC服務,創建相應的服務swoole table表(ps:記錄調用成功和失敗的次數) 注冊worker,tick進程

woker進程監聽:
客戶端發送請求->解包成相對應的格式->執行對應的服務->返回結果->客戶端

tick進程:
注冊定時器發送心跳包到本節點管理器
啟用廣播:每隔幾秒發送本節點各個服務信息到其他節點
啟用監聽:監聽其他節點發送的信息,發送相對應的命令(心跳|下線)到節點管理器處理
進程關閉:主動刪除本節點的信息,發送下線廣播到其他節點

Rpc-Server

場景

例如在一個商場系統中,我們將商品庫和系統公告兩個服務切分開到不同的服務器當中。當用戶打開商場首頁的時候, 我們希望App向某個網關發起請求,該網關可以自動的幫我們請求商品列表和系統公共等數據,合并返回。

服務定義

每一個Rpc服務其實就一個EasySwoole\Rpc\AbstractService類。 如下:

定義商品服務

namespace App\RpcService;

use EasySwoole\Rpc\AbstractService;

class Goods extends AbstractService
{

    /**
     *  重寫onRequest(比如可以對方法做ip攔截或其它前置操作)
     *
     * @param string $action
     * @return bool
     * CreateTime: 2020/6/20 下午11:12
     */
    protected function onRequest(?string $action): ?bool
    {
        return true;
    }

    public function serviceName(): string
    {
        return 'goods';
    }

    public function list()
    {
        $this->response()->setResult([
            [
                'goodsId'=>'100001',
                'goodsName'=>'商品1',
                'prices'=>1124
            ],
            [
                'goodsId'=>'100002',
                'goodsName'=>'商品2',
                'prices'=>599
            ]
        ]);
        $this->response()->setMsg('get goods list success');
    }
}

定義公共服務

namespace App\RpcService;

use EasySwoole\Rpc\AbstractService;

class Common extends AbstractService
{
    public function serviceName(): string
    {
        return 'common';
    }

    public function mailBox()
    {
        $this->response()->setResult([
            [
                'mailId'=>'100001',
                'mailTitle'=>'系統消息1',
            ],
            [
                'mailId'=>'100001',
                'mailTitle'=>'系統消息1',
            ],
        ]);
        $this->response()->setMsg('get mail list success');
    }

    public function serverTime()
    {
        $this->response()->setResult(time());
        $this->response()->setMsg('get server time success');
    }
}

服務注冊

Easyswoole全局的Event文件中,進行服務注冊。至于節點管理、服務類定義等具體用法請看對應章節。

namespace EasySwoole\EasySwoole;

use App\RpcService\Common;
use App\RpcService\Goods;
use EasySwoole\EasySwoole\Swoole\EventRegister;
use EasySwoole\EasySwoole\AbstractInterface\Event;
use EasySwoole\Http\Request;
use EasySwoole\Http\Response;
use EasySwoole\Redis\Config\RedisConfig;
use EasySwoole\RedisPool\RedisPool;
use EasySwoole\Rpc\NodeManager\RedisManager;
use EasySwoole\Rpc\Config as RpcConfig;
use EasySwoole\Rpc\Rpc;

class EasySwooleEvent implements Event
{

    public static function initialize()
    {
        // TODO: Implement initialize() method.
        date_default_timezone_set('Asia/Shanghai');
    }

    public static function mainServerCreate(EventRegister $register)
    {
        /*
         * 定義節點Redis管理器
         */
        $redisPool = new RedisPool(new RedisConfig([
            'host'=>'127.0.0.1'
        ]));
        $manager = new RedisManager($redisPool);
        //配置Rpc實例
        $config = new RpcConfig();
        //這邊用于指定當前服務節點ip,如果不指定,則默認用UDP廣播得到的地址
        $config->setServerIp('127.0.0.1');
        $config->setNodeManager($manager);
        /*
         * 配置初始化
         */
        Rpc::getInstance($config);
        //添加服務
        Rpc::getInstance()->add(new Goods());
        Rpc::getInstance()->add(new Common());
        Rpc::getInstance()->attachToServer(ServerManager::getInstance()->getSwooleServer());
    }

    public static function onRequest(Request $request, Response $response): bool
    {
        // TODO: Implement onRequest() method.
        return true;
    }

    public static function afterRequest(Request $request, Response $response): void
    {
        // TODO: Implement afterAction() method.
    }
}

為了方便測試,我把兩個服務放在同一臺機器中注冊。實際生產場景應該是N臺機注冊商品服務,N臺機器注冊公告服務,把服務分開。

Rpc-Client

控制器聚合調用

namespace App\HttpController;

use EasySwoole\Http\AbstractInterface\Controller;
use EasySwoole\Rpc\Response;
use EasySwoole\Rpc\Rpc;

class Index extends Controller
{

    function index()
    {
        $ret = [];
        $client = Rpc::getInstance()->client();
        /*
         * 調用商品列表
         */
        $client->addCall('goods','list',['page'=>1])
            ->setOnSuccess(function (Response $response)use(&$ret){
                $ret['goods'] = $response->toArray();
            })->setOnFail(function (Response $response)use(&$ret){
                $ret['goods'] = $response->toArray();
            });
        /*
         * 調用信箱公共
         */
        $client->addCall('common','mailBox')
            ->setOnSuccess(function (Response $response)use(&$ret){
                $ret['mailBox'] = $response->toArray();
            })->setOnFail(function (Response $response)use(&$ret){
                $ret['mailBox'] = $response->toArray();
            });
        /*
        * 獲取系統時間
        */
        $client->addCall('common','serverTime')
            ->setOnSuccess(function (Response $response)use(&$ret){
                $ret['serverTime'] = $response->toArray();
            });

        $client->exec(2.0);

        $this->writeJson(200,$ret);
    }
}

注意,控制器中可以這樣調用,是因為服務端章節中,在EasySwoole的全局啟動事件已經對當前的Rpc實例定義注冊了節點管理器。因此在控制器中調用的時候 該Rpc實例可以找到對應的節點。一般來說,在做聚合網關的節點,是不需要注冊服務進去的,僅需注冊節點管理器即可。

客戶端

當rpc服務和客戶端不在同一服務中時,并且服務端客戶端使用的都是es

<?php
require_once 'vendor/autoload.php';

use EasySwoole\Rpc\Config;
use EasySwoole\Rpc\Rpc;
use EasySwoole\Rpc\NodeManager\RedisManager;
use EasySwoole\Rpc\Response;
$redisConfig = new \EasySwoole\Redis\Config\RedisConfig();
$redisConfig->setHost('127.0.0.1'); // 服務端使用的redis節點地址
$redisConfig->setPort('6379'); // 服務端使用的redis節點端口
$pool=new \EasySwoole\RedisPool\RedisPool($redisConfig);
$config = new Config();
$config->setServerIp('127.0.0.1'); // 指定rpc服務地址
$config->setListenPort(9502); // 指定rpc服務端口
$config->setNodeManager(new RedisManager($pool));
$rpc = new Rpc($config);

\Swoole\Coroutine::create(function () use ($rpc) {
    $client = $rpc->client();
    $client->addCall('UserService', 'register', ['arg1', 'arg2'])
        ->setOnFail(function (Response $response) {
            print_r($response->toArray());
        })
        ->setOnSuccess(function (Response $response) {
            print_r($response->toArray());
        });

    $client->exec();
});
swoole_timer_clear_all();

跨平臺

Rpc的請求響應通過tcp協議,服務廣播使用udp協議,我們只需要實現網絡協議即可。

PHP示例代碼

<?php
/**
 * Created by PhpStorm.
 * User: xcg
 * Date: 2019/6/17
 * Time: 14:30
 */
$data = [
    'command' => 1,//1:請求,2:狀態rpc 各個服務的狀態
    'request' => [
        'serviceName' => 'UserService',
        'action' => 'register',//行為名稱
        'arg' => [
            'args1' => 'args1',
            'args2' => 'args2'
        ]
    ]
];

//$raw = serialize($data);//注意序列化類型,需要和RPC服務端約定好協議 $serializeType

$raw = json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);

$fp = stream_socket_client('tcp://127.0.0.1:9600');
fwrite($fp, pack('N', strlen($raw)) . $raw);//pack數據校驗

$data = fread($fp, 65533);
//做長度頭部校驗
$len = unpack('N', $data);
$data = substr($data, '4');
if (strlen($data) != $len[1]) {
    echo 'data error';
} else {
    $data = json_decode($data, true);
//    //這就是服務端返回的結果,
    var_dump($data);//默認將返回一個response對象 通過$serializeType修改
}
fclose($fp);

Go示例代碼

package main

import (
    "encoding/binary"
    "net"
)

func main() {
    var tcpAddr *net.TCPAddr
    tcpAddr,_ = net.ResolveTCPAddr("tcp","127.0.0.1:9600")
    conn,_ := net.DialTCP("tcp",nil,tcpAddr)
    defer conn.Close()
    sendEasyswooleMsg(conn)
}

func sendEasyswooleMsg(conn *net.TCPConn) {
    var sendData []byte
    data := `{"command":1,"request":{"serviceName":"UserService","action":"register","arg":{"args1":"args1","args2":"args2"}}}`
    b := []byte(data)
    // 大端字節序(網絡字節序)大端就是將高位字節放到內存的低地址端,低位字節放到高地址端。
    // 網絡傳輸中(比如TCP/IP)低地址端(高位字節)放在流的開始,對于2個字節的字符串(AB),傳輸順序為:A(0-7bit)、B(8-15bit)。
    sendData = int32ToBytes8(int32(len(data)))
    // 將數據byte拼裝到sendData的后面
    for _, value := range b {
        sendData = append(sendData, value)
    }
    conn.Write(sendData)
}

func int32ToBytes8(n int32) []byte {
    var buf = make([]byte, 4)
    binary.BigEndian.PutUint32(buf, uint32(n))
    return buf
}

Java

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class Main {
    public static void main(String[] args) throws IOException {
        byte[] msg = "{\"command\":1,\"request\":{\"serviceName\":\"UserService\",\"action\":\"register\",\"arg\":{\"args1\":\"args1\",\"args2\":\"args2\"}}}".getBytes();
        byte[] head = Main.toLH(msg.length);
        byte[] data = Main.mergeByteArr(head, msg);

        //創建Socket對象,連接服務器
        Socket socket=new Socket("127.0.0.1",9600);
        //通過客戶端的套接字對象Socket方法,獲取字節輸出流,將數據寫向服務器
        OutputStream out=socket.getOutputStream();
        out.write(data);

        //讀取服務器發回的數據,使用socket套接字對象中的字節輸入流
        InputStream in=socket.getInputStream();
        byte[] response=new byte[1024];
        int len=in.read(response);
        System.out.println(new String(response,4, len-4));
        socket.close();
    }

    static byte[] toLH(int n) {
        byte[] b = new byte[4];
        b[3] = (byte) (n & 0xff);
        b[2] = (byte) (n >> 8 & 0xff);
        b[1] = (byte) (n >> 16 & 0xff);
        b[0] = (byte) (n >> 24 & 0xff);
        return b;
    }

    static byte[] mergeByteArr(byte[] a, byte[] b) {
        byte[] c= new byte[a.length + b.length];
        System.arraycopy(a, 0, c, 0, a.length);
        System.arraycopy(b, 0, c, a.length, b.length);
        return c;
    }
}

其他語言只需要實現tcp協議即可

EasySwoole RPC 自定義注冊中心

EasySwoole默認為通過UDP廣播+自定義進程定時刷新自身節點信息的方式來實現無主化/注冊中心的服務發現。在服務正常關閉的時候,自定義定時進程的onShutdown方法會執行deleteServiceNode方法來實現節點下線。在非正常關閉的時候,心跳超時也會被節點管理器踢出。

有些情況,不方便用UDP廣播的情況下,那么EasySwoole支持你自定義一個節點管理器,來變更服務發現方式。

例如用Redis來實現

namespace EasySwoole\Rpc\NodeManager;

use EasySwoole\RedisPool\RedisPool;
use EasySwoole\Rpc\ServiceNode;
use EasySwoole\Utility\Random;

class RedisManager implements NodeManagerInterface
{
    protected $redisKey;

    protected $pool;

    function __construct(RedisPool $pool, string $hashKey = 'rpc')
    {
        $this->redisKey = $hashKey;
        $this->pool = $pool;
    }

    function getServiceNodes(string $serviceName, ?string $version = null): array
    {
        $redis = $this->pool->getObj(15);
        try {
            $nodes = $redis->hGetAll("{$this->redisKey}_{$serviceName}");
            $nodes = $nodes ?: [];
            $ret = [];
            foreach ($nodes as $nodeId => $node) {
                $node = new ServiceNode(json_decode($node,true));
                /**
                 * @var  $nodeId
                 * @var  ServiceNode $node
                 */
                if (time() - $node->getLastHeartBeat() > 30) {
                    $this->deleteServiceNode($node);
                }
                if ($version && $version != $node->getServiceVersion()) {
                    continue;
                }
                $ret[$nodeId] = $node;
            }
            return $ret;
        } catch (\Throwable $throwable) {
            //如果該redis斷線則銷毀
            $this->pool->unsetObj($redis);
        } finally {
            $this->pool->recycleObj($redis);
        }
        return [];
    }

    function getServiceNode(string $serviceName, ?string $version = null): ?ServiceNode
    {
        $list = $this->getServiceNodes($serviceName, $version);
        if (empty($list)) {
            return null;
        }
        return Random::arrayRandOne($list);
    }

    function deleteServiceNode(ServiceNode $serviceNode): bool
    {
        $redis = $this->pool->getObj(15);
        try {
            $redis->hDel($this->generateNodeKey($serviceNode), $serviceNode->getNodeId());
            return true;
        } catch (\Throwable $throwable) {
            $this->pool->unsetObj($redis);
        } finally {
            $this->pool->recycleObj($redis);
        }
        return false;
    }

    function serviceNodeHeartBeat(ServiceNode $serviceNode): bool
    {
        if (empty($serviceNode->getLastHeartBeat())) {
            $serviceNode->setLastHeartBeat(time());
        }
        $redis = $this->pool->getObj(15);
        try {
            $redis->hSet($this->generateNodeKey($serviceNode), $serviceNode->getNodeId(), $serviceNode->__toString());
            return true;
        } catch (\Throwable $throwable) {
            $this->pool->unsetObj($redis);
        } finally {
            //這邊需要測試一個對象被unset后是否還能被回收
            $this->pool->recycleObj($redis);
        }
        return false;
    }

    protected function generateNodeKey(ServiceNode $node)
    {
        return "{$this->redisKey}_{$node->getServiceName()}";
    }
}

即使關閉了UDP定時廣,EasySwoole Rpctick進程依舊會每3秒執行一次serviceNodeHeartBeat用于更新自身的節點心跳信息。

主站蜘蛛池模板: 国产熟妇乱xxxxx大屁股网 | 99亚洲精品在线 | 久久综合九色综合久99 | 中国黄色一级大片 | 久久综合久久自在自线精品自 | 久久久一级黄色片 | 日本精品巨爆乳无码大乳巨 | 尤物99av写真在线 | 国产精品福利视频一区 | 九色porny丨天天更新 | 国产色视频网站 | 拔插拔插海外华人免费视频 | 粉嫩av一区二区三区天美传媒 | 日韩成人在线播放 | 日本免费一区二区三区高清视频 | 欧美hdxxxx| 国产xxx69麻豆国语对白 | 欧美性受xxxx狂喷水 | 欧美精品一区二区三区在线四季 | 中文字幕人妻第一区 | 色播综合网 | 人人草人人做人人爱 | 中文字幕有码在线播放 | 亚洲国产一区二区在线观看 | 国产又爽又黄的激情精品视频 | 中文字幕女同女同女同 | 欧美群交射精内射颜射潮喷 | 影音先锋男人天堂 | 国产91在线精品 | 天堂а√8在线最新版在线 天堂а√在线地址 | 久久综合给合久久狠狠狠97色 | 老头与老头性ⅹxx视频 | 国产精品国产三级国产有见不卡 | 婷婷干| 香蕉久操 | 91区人人爽人人都喜欢人人都有 | 国产第100页 | 国产乱人伦精品免费 | 无码一区二区三区免费 | 91www| 久久综合国产伦精品免费 | 欧美尿交 magnet | 日本一区二区三区四区在线观看 | 性欧美乱束缚xxxx白浆 | 午夜性刺激免费看视频 | 黄网在线免费看 | 在线中文字幕观看 | 日日爽视频 | av中文字 | 欧美成人资源 | 日本www| 亚洲成人网在线观看 | 成人免费av在线播放 | 国产精品18久久久久白浆软件 | 婷婷色六月天 | 亚洲天堂一 | 日本极度另类 | 超碰中文在线 | 黄页在线播放 | 久久99精品国产91久久来源 | 狠狠色噜噜狠狠狠狠999米奇 | 有一婷婷色 | 国产精品毛片大码女人 | 色中色av | 拍拍拍无挡免费视频 | 国产乡下妇女三片 | 夜精品a片一区二区三区无码白浆 | 国产精品永久久久久久久久久 | 国自产偷精品不卡在线 | 香蕉视频黄版 | 五月天丁香视频 | blacked蜜桃精品一区 | 人人妻人人澡人人爽人人精品 | 1000部啪啪未满十八勿入 | 伊人伊人网 | 丰满少妇精品一区二区性也 | 日韩精品三级 | 色呦呦视频在线观看 | 97超碰伊人 | 香蕉久久精品日日躁夜夜躁夏 | 18成禁人视频免费 | 成人交配视频 | 成年人免费小视频 | 国产精品主播 | 超碰xxx| 日韩欧美h| 日韩福利 | 精久久久| 亚洲成av人片天堂网老年人 | 中文字幕在线观看英文怎么写 | 国精品人妻无码一区二区三区性色 | 日批网站在线观看 | heyzo综合国产精品216 | 美女黄频视频大全免费的国内 | 无码日韩人妻精品久久蜜桃 | 午夜福利视频合集1000 | 少妇特黄v一区二区三区图片 | 国产网红主播av国内精品 | 国产精品一区二区性色av | 大地资源中文第3页 | 日本免费网站 | 亚洲视频你懂的 | 日本大片免a费观看视频 | 少妇激情av一区二区 | 超碰国产天天做天天爽 | 国产一卡二卡三卡 | 国产伦精品一区二区三区四区视频 | 午夜国产一级片 | 亚洲日韩国产成网在线观看 | 天堂乱码一二三区 | 亚洲理论电影在线观看 | 丰满少妇高潮在线播放不卡 | 欧美性猛交xxxx乱大交俱乐部 | 人人草视频在线 | 国语对白乱妇激情视频 | 主播视频com入口在线观看 | 石原莉奈一区二区三区在线观看 | 奇米影视一区二区 | 天天国产视频 | 福利毛片 | www黄色网址 | 天堂av免费观看 | 97久久精品人妻人人搡人人玩 | 琪琪五月天 | 色哟哟在线观看视频 | 96在线视频 | 亚洲精品一二三区久久伦理中文 | 国产九九在线视频 | 欧美jizz19性欧美 | 久久精品免费国产 | 邻居少妇张开腿让我爽了在线观看 | 国产精品v欧美精品v日韩精品 | 亚洲va欧美va天堂v国产桃 | 天天干干干干干 | 东北少妇白嫩bbwbbw | 色婷婷香蕉在线一区 | 好吊视频一区二区三区四区 | 国产乱子伦精品免费无码专区 | 男女无遮挡xx00动态图120秒 | 欧美精品免费一区二区三区 | 亚洲第一在线播放 | 久久人人爽人人爽人人av | 免费观看成年人视频 | 国产成人亚洲欧洲在线 | 中文字幕在线免费观看 | 真实乱视频国产免费观看 | 久久不射影院 | 91福利在线观看 | 久久香蕉网| 少妇啪啪姿势不断呻吟av | 成人精品视频一区二区三区 | 久久好在线视频 | 中日韩美中文字幕av一区 | 黄色福利在线观看 | 精品福利av导航 | 无码孕妇孕交在线观看 | 久久久久久国产 | 涩涩屋www视频在线观看高清 | 2022av视频| 亚洲免费av观看 | 久久福利免费视频 | av全黄| 99精品欧美 | 操操网 | 亚洲大尺度在线 | 特级黄色毛片视频片子 | 国语自产偷拍精品视频 | 国产精品视频全国免费观看 | 欧美黄色录像片 | 国产视频在线观看网站 | 国产真实伦种子 | 黑丝久久| 国产成人午夜精华液 | 欧美伊人| 涩涩屋www视频在线观看高清 | 欧美大片一区二区三区 | youjizz.com在线播放 | 亚洲精品一区二区三区四区五区 | 两个人看的www免费视频中文 | 无码gogo大胆啪啪艺术 | 四虎网站在线播放 | 在线观看91视频 | 啪免费视频 | 欧美天堂在线视频 | 亚洲精品国产精品国自产 | 久久久久久国产精品美女 | 久久久久99精品久久久久 | 人人看人人做 | 欧美国产在线看 | 美日韩av | 日韩视频在线观看免费 | 黄色动漫软件 | 亚洲最大的成人网 | 欧洲精品在线播放 | 欧美亚洲二区 | 国产三级一区 | 北条麻妃久久精品 | 国产精品亚洲аv无码播放 露脸内射熟女--69xx | 永久天堂网 av手机版 | 久久成人精品 | 亚洲欧洲日韩一区二区三区 | 国产精品久久久久久久久借妻 | 娇妻被黑人粗大高潮白浆 | 国产精品久久久久久久毛片 | 国产二区三区视频 | 国产精品sm | 波多野结衣91 | 九色综合网| 亚洲色啦啦狠狠网站 | 久久99草 | 国产视频一区二区在线 | 18禁裸乳无遮挡啪啪无码免费 | 在线看成人av | 日韩精品一区二区免费视频 | 在线亚洲+欧美+日本专区 | 国产精品国产三级国产aⅴ 国产精品国产三级国产aⅴ9色 | 亚洲欧美日韩国产成人精品影院 | 麻豆成人91精品二区三区 | 久久中文字幕一区二区三区 | 天天爽天天做 | 伊人天天 | 久草在线成人 | 懂色av一二三三区免费 | 日韩欧美国产一区二区在线观看 | 中国女人内谢69xxxxⅹ视频 | 久久亚洲精品中文字幕 | 99精品国产成人一区二区 | 91探花在线播放 | r级无码视频在线观看 | 国产欧美精品一区二区三区四区 | 日韩91av | 亚洲日本久久久 | 夫妻免费无码v看片 | 大陆偷拍av | www.av网址| 久久亚洲国产成人精品无码区 | 日少妇av| 性猛交富婆╳xxx乱大交视频 | 操欧美女 | 国产特级毛片aaaaaa喷潮 | 337p日本欧洲亚洲大胆裸体艺术 | 精品无码久久久久久久久 | 福利资源导航 | 夜夜躁狠狠躁日日躁2021日韩 | 日本少妇aaa | 免费在线观看黄色 | 激情欧美一区二区 | 国产91天堂素人搭讪系列 | 国产一区不卡视频 | 香蕉久久av一区二区三区 | 久久久久久久久久久久久久久久久久 | 一本色道久久88亚洲精品综合 | 色噜噜狠狠色综合欧洲 | 色乱码一区二区三区麻豆 | 91色多多| 国产99久久久国产精品免费看 | 荡女淫春 在线观看69影院 | 最新版天堂资源中文在线 | 国产亚洲欧美精品久久久久久 | 午夜精品久久久久久不卡8050 | 一本色道亚洲精品aⅴ | 91高清免费视频 | 亚洲偷自拍另类图片二区 | 国产成人av一区二区三区不卡 | 明星性猛交ⅹxxx乱大交 | 自拍视频一区二区三区 | 免费黄色小视频 | 少妇脱了内裤让我添 | 国产精品theporn | 精品久久久久久无码中文字幕 | 91久久久久久久久久久久 | 国产极品美女高潮无套在线观看 | 成人免费看片'在线观看 | av日韩在线免费观看 | 在线资源站 | 成年午夜无码av片在线观看 | 综合人人 | 中文字幕在线观看av | 丰满少妇女裸体bbw 无码av免费一区二区三区试看 | 91福利社区在线观看 | 性一交一黄一片 | 非洲黑人狂躁日本妞视频 | 中文字幕av无码一区二区三区 | 国产在线精品一区二区中文 | 熟妇高潮一区二区三区 | 67194国产| 久久99精品久久久久久琪琪 | 黄色av免费播放 | 国产欧美一区二区三区国产幕精品 | 精品aⅴ一区二区三区 | 18禁免费观看网站 | av天堂亚洲国产av | 国产情侣第一页 | 国内国外精品影片无人区 | 9久9久9久女女女九九九一九 | 日本一区二区三区视频在线播放 | 国产精品情侣呻吟对白视频 | 丁香婷婷亚洲 | 黄色天天影视 | 色婷婷午夜 | 亚洲情趣| 538prom精品视频线放 | 亚洲午夜久久久精品一区二区三区 | 丁香五月网久久综合 | 日本艹逼视频 | 亚洲成成品网站 | 国产成人免费9x9x人网站视频 | 91免费视频播放 | 成–人–黄–色–网–站 | 国产精品久久二区二区 | 午夜剧场福利社 | 插插插操操操 | 国产精品一区二区三区四区在线观看 | 久久亚洲精品视频 | 中文字幕日韩一区二区三区不卡 | 久久女女 | 久久久久久久久久久网站 | 国产精品96久久久久久久 | aⅴ在线视频男人的天堂 | 调教驯服丰满美艳麻麻在线视频 | 亚洲一区二区不卡在线观看 | 999在线观看精品免费不卡网站 | 老少交欧美另类 | 91在线观| 精品久久久久久成人av | 国产又黄又粗又猛又爽视频 | 免费观看成人毛片 | 国产a久久麻豆入口 | 黄色片网站在线观看 | 中文字幕在线观看视频地址二 | 激情五月综合色婷婷一区二区 | 91av免费看| 黑人操日本女人视频 | 亚洲成人精品在线观看 | 国产精品久久久久久久久久久久冷 | 人av在线 | 成人高潮片免费视 | 涩涩视频网站 | 日韩av激情在线观看 | 偷拍网亚洲 | 欧美肥臀大乳一区二区免费视频 | 成人久久久精品国产乱码一区二区 | 国产精品视频色拍拍 | www国产亚洲精品久久麻豆 | 国产精品永久免费 | 超碰人人人人人 | wwwxxx亚洲| 国产一区二区三区在线免费 | 久久99色 | 亚洲人色婷婷成人网站在线观看 | 国产在线精| 欧洲成人在线 | 精品推荐国产精品店 | 天堂在线一区二区 | 日本熟妇大屁股人妻 | 日韩高清不卡 | 久久男人天堂 | 免费成人黄色av | 亚洲日本va中文字幕 | 日韩精品久久久免费观看夜色 | аⅴ天堂中文在线网 | 另类国产ts人妖高潮系列视频 | 国模无码大尺度一区二区三区 | 日韩精品视频免费 | 最新91在线 | 亚洲xx网站| 精品成在人线av无码免费看 | 亚洲欧美一区二区三区情侣bbw | 欧美一级片播放 | 国产偷窥熟女精品视频大全 | 国产成人综合久久精品免费 | 日韩黄色小视频 | 两个人看的www视频免费完整版 | 日本亚洲欧洲色α | 2022国产精品| 经典三级久久 | 国产综合久久久久久鬼色 | 无码乱人伦一区二区亚洲 | 亚洲日本久久久 | 少妇av一区| 亚洲在av极品无码天堂手机版 | 国产精品入口麻豆九色 | 亚洲欧洲成人精品久久一码二码 | 日韩三级黄| 亚洲乱码国产乱码精品精的特点 | 亚洲丝袜色图 | 九色真实伦实例 | 精品成人在线观看 | 日韩亚洲欧美中文高清在线 | 欧美人与动牲交片免费 | 都市激情亚洲综合 | 国产精品揄拍500视频 | 欧美日韩激情一区二区 | 三级黄色毛片视频 | 成人做爰视频www网站小优视频 | 动漫av网站免费观看 | 国产偷抇久久精品a片69 | 国产精品欧美综合亚洲 | 操碰人人| 视频一区二区在线播放 | 成人欧美在线视频 | 久久99久久99精品免观看粉嫩 | 在线国产播放 | 两个黑人大战嫩白金发美女 | 1000部啪啪未满十八勿入下载 | 久久精品亚洲精品国产欧美kt∨ | 二区在线视频 | 精品国产一二区 | 国产精品自在在线午夜出白浆 | 哭悲在线观看免费高清恐怖片段 | 欧洲自拍一区 | 亚洲www啪成人一区二区 | 久久99亚洲精品久久99果 | 少妇啪啪姿势不断呻吟av | 一本之道乱码区 | 免费成人黄色网址 | 午夜男女无遮挡拍拍视频 | 日韩中文字幕第一页 | 日韩亚洲区 | 欧美亚洲综合网 | 国产精品久久久久国产a级 国产精品久久久久国产三级传媒 | 女装男の子av在线播放 | 黄色免费在线网站 | 国产全肉乱妇杂乱视频男男 | 乳霸冲田杏梨中文字幕担心学生的 | 亚洲一级黄色 | a天堂亚洲| 风流少妇又紧又爽又丰满 | 欧美日韩中文国产一区发布 | 性欧美精品 | 色一情一乱一伦一视频免费看 | 国产毛茸茸毛毛多水水多 | 久草在线免费福利资源 | 欧美一级做a爰片免费视频 欧美一级做性受免费大片免费 | 成人性生交大片免费看中文视频 | 日韩毛片 | 91精品久久久久久久久久入口 | 男生美女隐私黄www 男生女生羞羞网站 | 日韩人妻无码免费视频一区二区三区 | 国产一区二区不卡老阿姨 | 免费看黄色片的网站 | 无码精品人妻一区二区三区av | 国产欧美日韩中文字幕 | av福利在线| 久久久久久久久99精品 | 欧美成人国产精品高潮 | 黄色成人毛片 | 在线观看国产精品视频 | 日本大尺度床戏揉捏胸 | 亚洲国产aⅴ综合网 | 欧美人与性禽动交情品 | 四虎久久久 | 国产又粗又猛又爽免费视频 | 97色伦97色伦国产欧美空 | 九色av| 日本一区二区三区日本免费 | 免费av手机在线观看 | 2019中文字幕在线 | 亚洲最大成人在线 | 日本xxxxwww | 91精品国产乱码久久久久久久久 | 国产男女视频在线观看 | 免费一区视频 | 亚洲一级二级片 | 国模一区二区 | 国产产无码乱码精品久久鸭 | 久久亚洲精品中文字幕无男同 | 最新日韩av | 亚洲成人福利在线 | 草逼网站| 古装做爰无遮挡三级聊斋艳谭 | 色欲综合视频天天天 | 四虎国产成人永久精品免费 | 天天做天天爱天天做 | 国产91在线播放精品91 | 亚洲国产精品无码专区 | 淫语视频 | 黄色欧美网站 | wwwyoujizzcom视频 wwwyoujizzcom偷拍 | 久久成人黄色 | 68日本xxxxxⅹxxx59 | 中文字幕亚洲精品日韩 | 欧美色xxxxx 欧美色插 | 成人高清免费观看 | 免费成人av网址 | yy6080久久伦理一区二区 | 欧美熟妇另类久久久久久多毛 | 欧美视频在线免费 | 伊人婷婷在线 | 精品国产18久久久久久二百 | 久久岛国 | 粉嫩av一区二区三区免费观看喜好 | 色97色 | 欧美jizzhd欧美18| 日本丰满熟妇乱子伦 | 久久久亚洲精品一区二区三区浴池 | 亚洲 中文 欧美 日韩 在线 | 久草视频在线看 | 亚洲欧美日韩在线不卡 | 天干天干天啪啪夜爽爽av | 久久久夜夜 | 亚洲国产成人女毛片在线主播 | 久久久久久免费免费精品软件 | 亚洲黄色a级片 | 精品推荐国产精品店 | 蜜桃视频在线观看污 | 欧美成人高潮一二区在线看 | 亚洲啪啪aⅴ一区二区三区9色 | 在线日韩一区二区 | xx性欧美肥妇精品久久久久久 | 丁香花免费高清完整在线播放 | 日韩色吧| 日韩在线你懂的 | 综合久久久 | 日韩精品av久久有码一区浪潮 | 极品成人| 精品国产一区二区在线 | а天堂中文在线官网 | 丰满少妇在线观看资源站 | 成在线人免费无码高潮喷水 | 粉嫩av久久一区二区三区 | 国产精品久久久久久婷婷天堂 | 色噜噜狠狠成人中文 | 黄色毛片毛茸茸 | 日日摸夜夜添夜夜添国产2020 | 成人自拍一区 | 最新在线中文字幕 | 国产精品久久久久久久成人午夜 | 99国产精品久久久久 | 人人玩人人添人人澡 | 尤物99国产成人精品视频 | 熟女精品视频一区二区三区 | www性| 黑人巨大精品欧美一区二区 | 亚洲视频在线观看一区二区 | 91丝袜放荡丝袜脚交 | 国产日产久久高清欧美 | 一级一毛片 | 日本人又黄又爽又色的图片 | 丁香激情五月少妇 | 久久久久久影院 | 张筱雨337p大尺度欧美 | 國产一二三内射在线看片 | 久久综合给合综合久久 | 131mm少妇做爰视频 | 青青草99| 美女啪啪国产 | 最新亚洲人成无码网站 | 九九五月天 | 亚洲一级久久 | 国产免费又黄又爽又刺激蜜月al | 99爱国产| 国偷自拍 | 久久久久网址 | 日本特黄一级大片 | 懂色av噜噜一区二区三区av | 国产理伦天狼影院 | 中文字幕在线观看免费视频 | 女同理伦片在线观看禁男之园 | 日本丰满少妇高潮呻吟 | 91精品国产色综合久久久浪潮 | 天天做天天摸天天爽天天爱 | 亚洲视频二 | 人妻人人添人妻人人爱 | 阿v天堂在线观看 | 激情四射网站 | 91成人观看| 国产日韩欧美视频在线观看 | 亚洲地区天堂网 | 美女超碰 | 亚洲欧洲另类 | 精品国产乱码久久久久久虫虫 | 91人人看| 欧美日韩国产精品久久 | 亚洲日本人的毛茸茸 | 欧美精品久久久久久久久老牛影院 | 国产午夜精品av一区二区麻豆 | 国产一级视频在线观看 | 国产精品揄拍100视频 | 欧美黄色网 | 五月天婷婷亚洲 | 三级黄色片免费观看 | 欧美日韩乱 | 青青草大香焦在线综合视频 | 蜜桃狠狠色伊人亚洲综合网站 | 国产成人午夜精品5599 | 人人妻人人澡av天堂香蕉 | 亚洲国产精品无码久久一区二区 | 亚洲天堂五月 | 超碰97av在线| 狠狠操av | www.久久av.com| 色偷偷偷久久伊人大杳蕉 | 中文字幕亚洲综合久久综合 | 高h1v1翁妇肉乱怀孕 | 91不卡视频| 国产人妖视频一区二区 | 狠狠色噜噜狠狠狠狠97首创麻豆 | 国产无遮挡又黄又爽又色 | 蜜臀av免费一区二区三区 | 中品极品少妇xxx | 色播综合 | www蜜臀| 黄色二级毛片 | 久久人人爽av亚洲精品天堂 | yy6080久久伦理一区二区 | 91国产丝袜脚调教 | 欧美二区在线观看 | 久久久一级黄色片 | 少妇中文字幕乱码亚洲影视 | www国产视频| 国产精品免费在线 | 超碰超在线| 亚洲v欧美v另类v综合v日韩v | 久久www成人_看片免费不卡 |