亚洲精品成人_精品成人一区_999视频在线播放_免费黄色在线_亚洲成人久久久_久久www免费视频

跨平臺

Rpc 的請求響應是通過 tcp 作為傳輸層協議實現,服務廣播使用 udp 協議,所以當我們使用其他語言作為 Rpc 客戶端時,只需要實現對應的應用層網絡協議即可。

下面客戶端使用的服務端是 微服務 - 服務端章節 基于自定義節點管理器 Redis 節點管理器 實現的。

具體 RPC 服務端 demo 代碼可查看 Github RPC 5.x Demo Github 或者 Gitee RPC 5.x Demo Gitee

PHP RPC 客戶端示例代碼

<?php
/**
 * This file is part of EasySwoole.
 *
 * @link http://www.b3f21.cn
 * @document http://www.b3f21.cn
 * @contact http://www.b3f21.cn/Preface/contact.html
 * @license https://github.com/easy-swoole/easyswoole/blob/3.x/LICENSE
 */

$data = [
    'service' => 'Goods', // 需要調用的服務名稱
    'module'  => 'GoodsModule', // 需要調用的服務下的子模塊名稱
    'action'  => 'list',  // 需要調用的服務下的子模塊的方法名稱
    'arg'     => ['a', 'b', 'c'], // 需要傳遞的參數
];

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

// tcp://127.0.0.1:9600(示例請求地址) 是 rpc 服務端的地址,這里是本地,所以使用 127.0.0.1
// 開發者需要根據實際情況調整進行調用
$fp = stream_socket_client('tcp://127.0.0.1:9600');
fwrite($fp, pack('N', strlen($raw)) . $raw); // pack 數據校驗

$try = 3;
$data = fread($fp, 4);
if (strlen($data) < 4 && $try > 0) {
    $data .= fread($fp, 4);
    $try--;
    usleep(1);
}

// 做長度頭部校驗
$len = unpack('N', $data);
$data = '';
$try = 3;
if (strlen($data) < $len[1] && $try > 0) {
    $data .= fread($fp, $len[1]);
    $try--;
    usleep(1);
}

if (strlen($data) != $len[1]) {
    echo 'data error';
} else {
    $data = json_decode($data, true);
    // 這就是服務端返回的結果
    var_dump($data);
}

fclose($fp);

/**
 * 調用結果如下:
 * 其中 
 * statue 為服務端返回給客戶端的調用狀態碼 (具體可查看服務端:http://www.b3f21.cn/Microservices/Rpc/server.html)
 * result 為服務端返回給客戶端的調用結果
 * msg    為服務端返回給客戶端的調用狀態信息
 * responseUUID 為服務端響應客戶端的唯一標識
 */
array(4) {
  ["status"]=>
  int(0)
  ["result"]=>
  array(2) {
    [0]=>
    array(3) {
      ["goodsId"]=>
      string(6) "100001"
      ["goodsName"]=>
      string(7) "商品1"
      ["prices"]=>
      int(1124)
    }
    [1]=>
    array(3) {
      ["goodsId"]=>
      string(6) "100002"
            ["goodsName"]=>
      string(7) "商品2"
            ["prices"]=>
      int(599)
    }
  }
  ["msg"]=>
  string(22) "get goods list success"
  ["responseUUID"]=>
  string(36) "3897f7ea-12a0-39c1-8948-ee9b9bc37274"
}

注意:可能由于網絡問題,并不是一次就能 recv 獲取到調用結果。

Go RPC 客戶端示例代碼

/**
 * This file is part of EasySwoole.
 *
 * @link http://www.b3f21.cn
 * @document http://www.b3f21.cn
 * @contact http://www.b3f21.cn/Preface/contact.html
 * @license https://github.com/easy-swoole/easyswoole/blob/3.x/LICENSE
 */

package main

import (
    "encoding/binary"
    "net"
)

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

func sendEasyswooleMsg(conn *net.TCPConn) {
    var sendData []byte
    data := `{"service":"Goods","module":"GoodsModule","action":"list","arg":["a","b","c"]}`
    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 RPC 客戶端示例代碼

/**
 * This file is part of EasySwoole.
 *
 * @link http://www.b3f21.cn
 * @document http://www.b3f21.cn
 * @contact http://www.b3f21.cn/Preface/contact.html
 * @license https://github.com/easy-swoole/easyswoole/blob/3.x/LICENSE
 */

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 = "{\"service\":\"Goods\",\"module\":\"GoodsModule\",\"action\":\"list\",\"arg\":[\"a\",\"b\",\"c\"]}".getBytes();
        byte[] head = Main.toLH(msg.length);
        byte[] data = Main.mergeByteArr(head, msg);

        // 創建 Socket 對象,連接  rpc 服務器
        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);
        // 這里是 rpc 服務端返回的結果為 json 字符串
        System.out.println(new String(response, 4, len-4));
        socket.close();
    }

    public 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;
    }

    public 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;
    }
}

/**
 * 服務端返回結果如下:
 */
{"status":0,"result":[{"goodsId":"100001","goodsName":"商品1","prices":1124},{"goodsId":"100002","goodsName":"商品2","prices":599}],"msg":"get goods list success","responseUUID":"66b81f45-10f7-1a3e-fecd-9b57b021e31e"}

其他語言只需要實現對應的應用層協議即可

亚洲精品成人_精品成人一区_999视频在线播放_免费黄色在线_亚洲成人久久久_久久www免费视频
  • <kbd id="eqi2k"><code id="eqi2k"></code></kbd><cite id="eqi2k"><tbody id="eqi2k"></tbody></cite>
    国产一区自拍视频| 极品少妇一区二区三区| 99热精品在线观看| 亚洲国产高清视频| 99re视频在线播放| 久久av二区| 亚洲一卡二卡三卡| 亚洲激情视频| 97人人模人人爽人人少妇| 日产精品一线二线三线芒果| 国产精品v亚洲精品v日韩精品| 国产伦精品一区二区三区视频黑人| www日韩av| 一级做a爰片久久| 国产精品一页| 亚洲国产一区二区三区在线播| 亚洲福利免费| 久久99导航| 在线国产日韩| 欧美高清性xxxxhd| 亚洲久久在线| 玛丽玛丽电影原版免费观看1977| 国内精品久久国产| 国产综合18久久久久久| 在线看无码的免费网站| 久久精品第九区免费观看 | 日韩精品资源| 99国产精品自拍| 久久久久久国产精品免费免费| 亚洲视频狠狠| 欧美日韩在线观看一区二区三区| 99精品国产在热久久下载| 免费在线成人av电影| 亚洲精品无人区| 日韩av一区二区三区美女毛片| 99国产精品久久久久老师| 亚洲精品日韩成人| 成人蜜桃视频| 亚洲小说区图片区| 久久久久久久久久久久久久一区| 一区二区三区高清视频在线观看| 欧美精品亚洲精品| 91av免费看| 夜夜爽www精品| 女同一区二区| 欧美一区亚洲二区| 懂色一区二区三区av片| 亚洲小说欧美另类社区| 先锋影音网一区| 久久久综合亚洲91久久98| 久久尤物视频| 在线一区日本视频| 午夜视频一区| 伊人久久婷婷色综合98网| 欧美日韩国产精品一卡| 国产高清在线精品一区二区三区| 99精品热6080yy久久| 国产一区日韩欧美| 一本色道久久99精品综合| 鲁丝一区二区三区免费| 久久99精品久久久久子伦 | 久久大逼视频| 国产亚洲二区| 一区二区冒白浆视频| 亚洲清纯自拍| 99精品国产福利在线观看免费| 亚洲午夜精品一区二区| 亚洲性图久久| 影音先锋久久精品| 激情国产一区| 99re国产精品| 国产偷久久久精品专区| 国产精品亚洲综合色区韩国| 国产日韩一区二区| 久久精品女人天堂| 91精品国产综合久久久久久丝袜| 久久精品伊人| 国产日韩精品一区观看| 欧美二区三区| 永久免费精品视频网站| 午夜精品久久99蜜桃的功能介绍| 欧美喷水视频| 亚洲开发第一视频在线播放| 亚洲一区日韩| 国产日韩一区欧美| 日韩av免费电影| 欧美日韩一区二区三区在线观看免| 狠狠色综合网| 亚洲综合三区| 久久精品人成| 欧美1区2区3区| 黄色在线一区| 91青青草免费在线看| 久久日韩精品| 在线综合视频网站| 亚洲国产精品一区制服丝袜| 久久不射2019中文字幕| 久久久久久久久一区二区| 欧美一区二区三区免费看| 日韩视频一区| 99在线观看| 日本成人黄色| 一区精品在线| 国产精品果冻传媒潘| 色姑娘综合网| 国产欧美韩日| 欧美一区观看| 99re国产精品| 久久久久久国产精品免费免费| 中文字幕一区二区三区5566| 国产日韩视频| 欧美日韩一区二| 一本久久知道综合久久| 久久久久九九九| 在线不卡亚洲| 国产欧美一区二区视频| 国产精品videosex极品| 成人免费视频网站| 欧美二区在线| 国产视色精品亚洲一区二区| 国产精品黄色| 精品欧美国产一区二区三区不卡| 韩国在线一区| 久久久久久久免费| 亚洲综合精品四区| 亚洲一区二区三区午夜| 91久久极品少妇xxxxⅹ软件| 宅男在线精品国产免费观看| 97人人模人人爽人人少妇| 欧美精品成人一区二区在线观看| 99久久精品免费看国产一区二区三区 | 亚洲一区日韩| 一区二区三区|亚洲午夜| 99国产盗摄| 亚洲日本免费| 亚洲人成人77777线观看| 69174成人网| 亚洲精品一区二区三区蜜桃久| 欧美日韩最好看的视频| 久久久久综合| 亚洲国产日韩综合一区| 亚洲精品第一区二区三区| 国产专区一区二区| 久久久久久久久久久一区| 国产精品观看| 色爱区成人综合网| 久久青青草综合| 99热在线国产| 久久xxxx| 亚洲一区自拍| 国产精品免费一区二区三区在线观看| 亚洲日本欧美在线| 日本福利一区二区三区| 91中文字精品一区二区| 久久国产精品亚洲77777| 亚洲精选久久| 亚洲茄子视频| 亚洲精品1区| 国内一区二区三区| 欧美粗暴jizz性欧美20| 亚洲欧洲中文| 亚洲一区二区在线免费观看| 日韩电影免费观看在| 精品国产一二| 精品蜜桃一区二区三区| 国产精品自拍首页| 国产精品一码二码三码在线| 97人人模人人爽人人少妇| 老司机午夜精品视频在线观看| 亚洲永久视频| 久久成人免费| 国产精品久久国产三级国电话系列| 久久大香伊蕉在人线观看热2| 国产日韩欧美一区二区| 久久国产精品久久久久久电车| 亚洲欧美日韩精品在线| 一区二区三区高清视频在线观看| 日韩一区二区久久| 久久国产一二区| 成人欧美一区二区三区视频xxx | 欧美一级专区| 老鸭窝亚洲一区二区三区| 久久精品盗摄| 精品国产乱码久久久久软件| 欧美日韩三区四区| 日本一区免费在线观看| 亚洲成色最大综合在线| 欧美福利电影在线观看| 一区二区亚洲| 久久综合九色综合久99| 国产日韩久久| 亚洲最新在线| 伊人成年综合电影网| 噜噜噜在线观看免费视频日韩| 好看的日韩精品视频在线| 日韩国产高清一区| 国产综合激情| 97人人澡人人爽| 欧美日本韩国一区二区三区| 韩国一区二区三区美女美女秀|