五月天激情丁香,国产精品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用于更新自身的節點心跳信息。

主站蜘蛛池模板: 久久99精品久久久久婷婷 | 老少交欧美另类 | 国产欧美日韩视频 | 欧美一级色片 | 97色婷婷| 欧美性网站 | 免费在线黄 | 日韩美女一级片 | 少妇精品久久久久久久久久 | 精品一卡二卡三卡 | 亚洲自偷精品视频自拍 | 操欧美美女 | 亚洲一区二区三区日本久久九 | 免费无遮挡无码视频网站 | 日韩高清成人 | 亚洲蜜桃视频 | 色爽爽爽爽爽爽爽爽 | 精品亚洲韩国一区二区三区 | 无码国内精品人妻少妇蜜桃视频 | 97资源共享在线视频 | 欧美偷拍一区二区三区 | 豆国产95在线 | 亚洲 | 中文幕无线码中文字蜜桃 | 99国产精品久久不卡毛片 | 欧美精品色视频 | 亚洲调教欧美在线 | 亚洲精选一区 | 黄色试频 | 亚洲啪啪少妇裸体艺术 | 涩涩涩综合 | 人妻丝袜中文无码av影音先锋专区 | 国产又黄又爽又刺激的软件 | 日本精品视频一区二区三区 | 男人深夜网站 | 大胸喷奶水www视频妖精网站 | 日本美女动态图 | 日本大乳高潮视频在线观看 | 色综合天天综合狠狠爱 | 麻豆精品免费视频 | 狠狠色丁香婷婷综合 | 成年在线观看视频 | 日韩精品一区二区三区四区视频 | 亚洲午夜在线视频 | 深夜在线| 青青青看免费视频在线 | 欧美一二三四五区 | 国产精品麻豆入口29 | 丁香六月久久 | 国语对白新婚少妇在线观看 | 亚洲一区二区三区四区 | 国产chinese精品av | 国产成人免费在线 | 免费成人在线播放 | 九九在线免费视频 | 免费观看国产精品视频 | 中文字幕日韩精品在线观看 | 日韩在线免费视频 | 亚洲永久精品视频 | 成年人小视频 | 爱吃波客今天最新视频 | 欧美一区二区三区激情 | 日本中文不卡 | 欧美精品二区三区四区免费看视频 | 日本亲子乱子伦xxxx30路 | 国产精品扒开腿做爽爽爽a片唱戏 | 婷婷五综合| 色妞视频男女视频 | 国产一区二区视频网站 | 少妇啪啪高潮肉谢 | 婷婷成人亚洲综合国产xv88 | 国产精品免费久久久久软件 | 天堂在线国产 | 久久久精品中文字幕 | 国产99免费视频 | 国产精品日日夜夜 | 天天草天天爱 | 天堂网www. | 咪咪色图 | 国产精品丝袜在线观看 | 国产精品video | 天堂а√在线中文在线新版 | 狠狠干视频网 | 美女一区二区三区网av | 18禁美女黄网站色大片免费看 | 一区二区三区观看 | 亚洲欧美一区二区三区三高潮 | 大肉大捧一进一出好爽视频mba | 国产精品乱码一区二区视频 | 国产小呦泬泬99精品 | 久久久久成人精品无码 | a毛片毛片av永久免费 | 无尺码精品产品网站 | 91网站在线免费观看 | 日韩精品一区在线 | 青娱乐青青草 | 国产小视频在线免费观看 | 国产美女免费视频 | 欧洲女人牲交视频免费 | 国产精品亚洲视频 | 欧美精品免费一区二区三区 | 亚洲国产aⅴ综合网 | 午夜精品一区二区三区免费视频 | 欧美日韩精品久久久免费观看 | 欧美最顶级丰满的aⅴ艳星 欧美最黄视频 | 国语自产拍精品香蕉在线播放 | 日本公妇乱偷中文字幕 | 九九在线视频免费观看精彩 | 久久亚洲熟女cc98cm | 久久久久国产精品嫩草影院 | 性做久久久久久久免费看 | 日韩欧美高清在线视频 | 午夜精品亚洲一区二区三区嫩草 | 刘亦菲乱码一区二区三区 | 精品日韩在线视频 | 亚洲欧美日韩一区 | 玩弄中年熟妇正在播放 | 在线观看三级网站 | 三级黄网站| 日韩人妻精品无码一区二区三区 | 97人人模人人爽人人少妇 | 一级做a免费视频 | 欧美一级成人 | 外国黄色网 | 青青草手机在线视频 | 日本成人一区二区 | 国产精品久久久久久久久福交 | 国产在线国偷精品产拍 | 亚洲国产精品久久久天堂不卡 | 欧产日产国产精品98 | 九色porny丨首页入口网页 | 一级黄色录像免费观看 | 国产精品性色 | 国内精品视频 | 亚洲播播 | 国产精品久久久久9999小说 | 国产精品伦一区二区 | 少妇高潮疯狂叫床在线91 | 免费在线观看黄色网 | 搡老女人一区二区三区视频tv | 一道本在线伊人蕉无码 | 天天躁日日躁狠狠躁2018小说 | 天天干视频在线观看 | 99久久久久久久久久久 | 日韩欧美一中文字暮专区 | 日日噜噜夜夜狠狠视频 | 国产成人免费ā片在线观看老同学 | 日日噜噜夜夜狠狠视频 | 精品夜夜澡人妻无码av蜜桃 | 国产情侣啪啪 | 亚洲色欲色欲www在线观看 | av美女网站 | 国产中文区3幕区2021 | 依人在线视频 | 久久国产精品久久久久久电车 | 波多野结衣亚洲一区二区 | 欧美疯狂做受xxxxx高潮 | 超碰人人人人人人人 | 午夜国产一级片 | 成人啪啪18免费网站看 | 国产精品系列在线 | 日本黄色录象 | 亚洲视频在线观看 | 欧美xx视频 | 大胸少妇午夜三级 | 欧美丰满一区二区免费视频 | 人禽20z0性伦 | 日本黄色特级片 | 亚洲在av极品无码天堂手机版 | 国产午夜精品久久久久久免费视 | 亚洲福利在线观看 | 国产亚洲精品美女久久久久 | av天堂午夜精品一区二区三区 | 亚洲天堂热 | 国产精品久久久久久久久久妇女 | 国产免费拔擦拔擦8x高清在线人 | 性猛交ⅹxxx富婆视频 | 日韩精品一区二 | www久久99| 日本少妇丰满大bbb的小乳沟 | 狠狠色噜噜狠狠狠狠奇米777 | 成人h动漫精品一区二区原神 | 国产一级美女 | 中文在线视频 | 少妇人妻大乳在线视频 | 69sex久久精品国产麻豆 | 免费国产又色又爽又黄的网站 | 高清不卡一区二区三区 | 法国a级理论片乱 | 任我爽精品视频在线观看 | 亚洲最大毛片 | 久久免费国产精品 | 在线视频欧美日韩 | 天天成人 | 91国内| 久久精品www人人爽人人 | 免费观看一区二区三区视频 | 噜啦噜色姑娘综合网 | 亚洲香蕉视频天天爽 | 国产精品嫩草影院桃色 | 久久精品日产第一区二区 | 国产成人手机高清在线观看网站 | 一级做受大片免费视频 | 亚洲一级色 | 欧美一区二区三区四区五区 | 美丽肉奴隷1986在线观看 | 麻豆高清免费国产一区 | 精品熟人一区二区三区四区 | 噼里啪啦动漫在线观看 | 性色av一区二区三区无码 | 69性视频| 精品一区二区三区av | 韩国三级欧美三级国产三级 | 精品综合久久 | 性一交一伦一视一频 | 中文字幕人妻中文 | 超碰色偷偷男人的天堂 | 韩国三级少妇高潮在线观看 | 人人妻人人澡人人爽欧美一区九九 | 久久久无码精品亚洲日韩蜜桃 | 黄色a大片 | 精品一区二区三区蜜桃 | 亚洲天码中字 | 免费观看日韩毛片 | 91国偷自产一区二区三区水蜜桃 | 亚洲国产精品美女 | 欧美色成人 | 国产真实野战在线视频 | 欧美福利精品 | 亚洲综合av一区二区三区 | 在线观看免费av网址 | 国产精品免费一区二区三区都可以 | 日韩激情久久 | 一区二区三区在线看 | 最新日韩av | www.日韩在线观看 | 欧美v亚洲 | 人人澡 人人澡 人人看 | 国产美女网 | 久9在线 | 亚洲午夜精品一区二区 | 香蕉一级视频 | 久久久久久国产精品三区 | 美女爆吸乳羞羞免费网站妖精 | 丝袜脚交一区二区 | 激情成人av | 亚洲精品久久久一区二区三区 | 文中字幕一区二区三区视频播放 | 欧美自拍嘿咻内射在线观看 | 激情综合色综合啪啪五月丁香 | 国产在线精品一区二区 | 国产精品a成v人在线播放 | 性一交一乱一区二区洋洋av | 插嫩嫩学生妹p | 97在线视频网站 | 欧美一区2区三区4区公司 | 一区二区在线免费看 | 色妞综合网 | 精品国产欧美日韩 | 精品国产91久久久久久久 | 欧美日韩亚洲国产精品 | 在厨房拨开内裤进入在线视频 | 天堂国产一区二区三区 | 深爱激情久久 | 日韩精品一区二区三区在线观看视频网站 | 国产老头和老太xxxx视频 | 99久久婷婷国产综合亚洲 | 日本少妇b | 久久亚洲精品成人无码网站 | 亚洲一区二区影院 | 在线精品视频一区二区三四 | 国产乱人伦av在线a麻豆 | 蜜桃导航-精品导航 | 成人性生交大片免费7 | 国产成人av免费网址 | 欧美日本一区二区三区 | 国产亚洲精品久久久久久久久久 | 丁香花在线观看免费观看图片 | 精品人无码一区二区三区 | 色妞导航 | 97久久精品人人澡人人爽缅北 | 亚洲加勒比在线 | 亚洲素人在线 | 影音先锋男人av鲁色资源网 | 九九av| 精品视频国产香蕉尹人视频 | 欧美激情a∨在线视频播放 少妇人妻无码专区视频 | 亚洲欧美日韩国产成人精品影院 | 亚洲日韩看片无码超清 | 久久久精品人妻一区二区三区蜜桃 | 亚洲成a人片在线观看无码 97se亚洲精品一区 | 成人在线视频免费播放 | 日本色www | 91绿帽黑人系列一区 | 日韩欧美精品在线观看 | 欧美 日本 国产 | 美女三级视频 | 国产精品99在线观看 | 少妇把腿扒开让我爽爽视频 | 国产精品久久久久久久久久了 | 免费一级a毛片在线播放 | 欧美人妖另类aaaaa | 中国女人大白屁股ass | 日韩不卡一区二区 | 国产嫩草一区二区三区在线观看 | 国产男女爽爽爽免费视频 | 农村少妇野战xxx视频 | 新狼窝色av性久久久久久 | 88成人免费快色 | 少妇特黄一区二区三区 | av资源网在线 | 伊人九九九有限公司 | 右手影院亚洲欧美 | 日本激情一区二区 | 东京热加勒比无码少妇 | 天天天色 | 中国免费看的片 | 亚洲国产长腿丝袜av天堂 | 少妇在线观看888视频 | 超碰公开免费 | 极品少妇一区二区 | 国产老熟女网站 | 性猛交富婆╳xxx乱大交麻豆 | 国产精品系列视频 | 中文字幕精品久久一二三区红杏 | 国产对白视频 | 78国产伦精品一区二区三区 | 天天色综合6 | wwwcom黄色 | 私人成片免费观看 | 99久久伊人精品综合观看 | 麻豆videos| 亚洲精品9999久久久久 | 男人女人黄 色视频免费 | 天天拍夜夜操 | 人妻在卧室被老板疯狂进入 | 亚洲区av | 人人爽人人爱 | 91在线观看. | 免费无码又爽又黄又刺激网站 | 天堂在线中文资源 | 亚洲视频色图 | 97青草| 男女超爽视频免费播放 | 中文字字幕 | 成人xvideos免费视频 | 国产欧美一区二区三区网站 | 永久免费看片在线 | 偷拍视频亚洲 | 免费激情视频网站 | 国产在线一卡二卡 | 亚洲成av人片在线观看天堂无码 | 成人区人妻精品一区二区不卡视频 | 欧美精品一级在线观看 | 国产免费无码一区二区视频 | 拔擦拔擦8x国产精品免费 | 婷婷九九| 丝袜 中出 制服 人妻 美腿 | 欧美香蕉爽爽人人爽 | 猫咪www免费人成人入口 | 国产中文字幕免费 | 久久无码人妻一区二区三区 | 日韩人妻无码一区二区三区综合部 | 国产精品亚洲成在人线 | 免费国产视频 | 男女高潮网站 | 欧美色欧美 | 又色又爽又黄又免费的照片 | 国产成人三级一区二区在线观看一 | 久久久精品久久久久 | jzzjzzjzz亚洲成熟少妇 | 国产美女包臀裙一区二区 | 久久中文字幕一区二区三区 | 国产农村乱子伦精品视频 | 91麻豆产精品久久久久久 | 成熟丰满熟妇av无码区 | 最新日韩精品 | 黄色大片在线播放 | 国产男女精品视频 | 久久精品国产99久久6动漫 | 免费观看久久久 | 天堂网在线最新版www | 久久福利网 | 国产人久久人人人人爽 | 久久导航精品一区 | 国产欧美日韩精品丝袜高跟鞋 | 中文在线а√在线8 | 久久精品视频久久 | 激情五月综合色婷婷一区二区 | 久久久久久成人毛片免费看 | 亚洲日韩中文字幕无码一区 | 狠狠躁夜夜躁人人爽天天高潮 | 性色综合| 男人天堂免费视频 | 国产精品无码免费播放 | 无码人妻视频一区二区三区 | 国产a网站| 亚洲欧美成人在线 | 四虎院影亚洲永久 | 午夜精品久久久久久久久久久久久 | 久久国产精品久久喷水 | 久久久久国 | 夜夜添日日射 | 精品一区二区三区四区视频 | 欧美人与物videos另类 | 久草久草久草 | asian日本若图pics | 黑人jizz60性黑人 | 免费中文字幕视频 | 哺乳一区二区久久久免费 | 日韩一二在线 | 韩日av免费 | 国产人妖视频一区二区 | 91av久久久| chinesehd一区二区三区 | 日韩人妻熟女中文字幕a美景之屋 | 亚洲成a人片在线播放 | 亚洲日韩精品一区二区三区 | 少妇性bbb搡bbb爽爽爽 | 性欧美乱束缚xxxx白浆 | 户外勾搭av片 | 亚洲色图欧美激情 | 女人毛片a毛片久久人人 | 日韩视频在线观看免费视频 | 中文字幕色婷婷在线视频 | 四虎影视永久免费观看 | 亚洲国产成人久久精品大牛影视 | 以色列最猛性xxxxx视频 | 免费观看污视频 | 久久婷婷成人综合色 | 国产女人高潮毛片 | 色哟哟网站在线观看 | 一本之道之高码清乱码加勒比 | 天干天干天干夜夜爽av | 亚洲欧美自拍偷拍 | 泰国三级av | 国产成人午夜精华液 | 亚洲欧美日韩综合久久久 | 日韩高清久久 | av免费的 | 亚洲国产欧美不卡在线观看 | 国产精品高潮呻吟久久av无 | 伊人久久麻豆 | 亚洲精品丝袜一区二区三区 | www狠狠操| 一本大道色婷婷在线 | 艳妇荡乳豪妇荡乳av精东 | 国产成人精品亚洲日本在线观看 | 日韩亚洲欧美一区二区 | 国产chinesehdxxxx麻豆网 | 一级做a爰片性色毛片视频停止 | 国产原创一区二区 | 二级大黄大片高清在线视频 | 国产精品99久久久久久久女警 | 一级免费黄色毛片 | 精品久久久久一区二区国产 | 色婷婷美国农夫综合激情亚洲 | 91国偷自产一区二区三区女王 | 黄色视屏在线播放 | 国产又粗又黄又猛 | 日韩69永久免费视频 | 国产男人的天堂 | av在线首页 | 91热久久| 亚洲开心网 | 人人爽人人爽人人片av亚洲 | 亚洲精品专区 | 亚洲毛片儿 | 国产成人精品av久久 | 美女视频黄频a免费 | 亚洲一区成人在线 | 777片理伦片在线观看 | 午夜嘿嘿嘿影院 | 经典三级第一页 | 亚洲自偷自偷在线制服 | 狠狠色香婷婷久久亚洲精品 | 国产亚洲精品久久久久久牛牛 | 欧美日韩免费观看视频 | 国产精品丝袜一区二区三区 | 免费又黄又裸乳的视频 | 国产精品乱码久久久久久 | 性感少妇av| 久久99色| 少妇高潮网站 | 亚洲中文字幕日产无码 | 在线天堂www在线 | 日韩欧美xxx | 成年无码av片在线狼人 | 91精品久久久久久久久99蜜臂 | 人人cao | 超级碰在线视频 | 国产精品久久久久精 | 久久午夜色播影院 | 国产黄色自拍视频 | 欧美成人高清视频在线观看 | 狠狠色狠狠色很很综合很久久 | 一区二区在线视频 | 国产女在线 | 国产精品国产三级国产aⅴ入口 | 国产国拍亚洲精品av在线 | 午夜福利1000集在线观看 | 视频在线日韩 | a色网站| 欧美18免费视频 | 污视频在线 | 国产porn| 久久伊人成人网 | 噼里啪啦高清在线观看 | 国产精品一区二区无线 | 在线观看成人无码中文av天堂 | 人乳喂奶hd播放 | 欧美三级网 | 80日本xxxxxxxxx96 81国产精品久久久久久久久久 | 美女赤身免费网站 | 成人做爰视频www网站小优视频 | 国产精品久久久久久久久久白浆 | 国产寡妇一级农村野外战 | zzijzzij日本丰满少妇 | 日韩在线一卡 | 日韩av无码一区二区三区 | 蜜桃成人网 | 少妇下蹲露大唇无遮挡图片 | 日本一级xxxx | 成人看黄色s一级大片 | 青青啪啪 | 特黄网站| 久久毛片网 | 日本大片在线看黄a∨免费 国产欧美性成人精品午夜 婷婷国产成人精品视频 | 农村欧美丰满熟妇xxxx | 日本少妇xxxx软件 | 嫩草视频在线播放 | 国产色视频播放网站www | 精品人妻无码一区二区色欲产成人 | 久久国产精品视频一区 | 美女视频黄a视频免费全程软件 | 成人午夜视频免费在线观看 | 国产精品久久国产精品99 | 我要看黄色1级片 | 91精品一区二区三区蜜臀 | 少妇与少年理论片午夜 | 福利社91| 老子午夜影院 | 狠狠色噜噜狠狠狠8888米奇 | 一边吃奶一边做动态图 | 九九九九热精品免费视频点播观看 | 青青草视频免费 | 天天夜碰日日摸日日澡性色av | av不卡免费观看 | 男女啪动最猛动态图 | 午夜av亚洲翘臀国产精网 | 日本h片在线观看 | 亚洲色图25p| 欧美一本 | 片黄在线观看 | 欧美日韩在线播放视频 | 丰满多毛的大隂户毛茸茸 | 精品国产一区二区三区久久久蜜月 | 少妇学院在线观看 | 成人精品久久 | 综合图区亚洲欧美另类图片 | 欧美精品一区二区三区四区 | 国产自产区 | 男女啪啪做爰高潮免费网站 | 床戏做爰无遮挡摸亲胸小说 | 亚洲一区二区小说 | 狠狠躁天天躁夜夜添人人 | 国产黄a | 午夜寂寞少妇 | 午夜亚洲精品 | 大学生精油按摩做爰hd | 久久福利精品 | 中文字幕超清在线观看 | 中文av一区二区 | 毛片免费在线观看视频 | 91福利视频在线观看 | 91国偷自产一区二区三区女王 | 成人免费高清在线观看 | 久久精品无码一区二区日韩av | 中文字幕乱码人妻综合二区三区 | 国产精品免费视频二三区 | 国产三级欧美三级日产三级99 | aaa欧美| 伊人成人免费视频 | 国产欧美另类精品久久久 | 久久精品国产亚洲5555 | 日日鲁鲁夜夜狼狼视频 | 无码h片在线观看网站 | 日韩第1页 | 亚洲日本精品视频 | 广州毛片 | 蜜桃av噜噜一区二区三区 | 美妇av | 亚洲精品码 | 国产黄色小视频在线观看 | 欧美亚洲国产日韩 | 精品无码成人网站久久久久久 | 五月天久久久久 | 超碰97人人人人人蜜桃 | 白嫩少妇激情无码 | 动漫精品一区 | 男女18禁啪啪无遮挡激烈网站 | 夜夜爽av | 18禁黄网站禁片免费观看女女 | 女女百合高h喷汁呻吟玩具 女女互揉吃奶揉到高潮视频 | 六月色丁香 | 国产精品成人亚洲一区二区 | 亚洲欧美综合精品成人导航 | 少妇和子乱视频 | 国产肥老妇对白清 | 日韩精品一区二区三区免费视频观看 | av网站久久| 久草新视频 | 久久99精品久久久久久水蜜桃 | 性——交——性——乱免费的 | 日韩大片在线观看 | 国产精品蜜 |