精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

利用Go傳統(tǒng)RPC和gRPC框架分別實現(xiàn)一個RPC服務端

開發(fā) 前端
RPC(Remote Procedure Call, 遠程過程調用) 是一種計算機通信協(xié)議, 它允許程序調用另一個地址空間(通常是遠程機器上的)的過程或函數(shù), 就像本地調用一樣, 而不需要顯示地處理網(wǎng)絡通信的細節(jié)。

1.RPC原理介紹

RPC(Remote Procedure Call, 遠程過程調用) 是一種計算機通信協(xié)議, 它允許程序調用另一個地址空間(通常是遠程機器上的)的過程或函數(shù), 就像本地調用一樣, 而不需要顯示地處理網(wǎng)絡通信的細節(jié)。RPC使得分布式系統(tǒng)中的不同模塊能夠相互通信, 而對開發(fā)者而言, 這種通信就像是本地調用一樣簡單。其調用原理圖如下:

圖片圖片

上面的步驟看起來很復雜, 實際上, 在當前的主流RPC框架, 例如:grpc、thrift, 只需要關心第1步和最后1步即可, 中間過程已經(jīng)由框架進行了封裝。在這篇文章中, 將從學習的角度自己來實現(xiàn)一個RPC的服務端全流程。

2.實現(xiàn)RPC服務端

這里模擬了用戶信息的注冊管理流程, 在服務端, 保存有多個用戶信息, 并提供兩個遠程調用接口, 一個是通過ID獲取對應的用戶信息接口, 另一個是添加新的用戶。參考代碼如下:

// 1. 定義要遠程調用的方法
type MathService struct {}

func (m *MathService) Multiply(args *Args, reply *int) error {
    *reply = args.A * args.B
    return nil
}

// 2. 定義請求和響應的數(shù)據(jù)結構
type Args struct {
    A, B int
}

在上面的代碼中, 我們定義了一個MathService結構體,其中包含了一個Multiply方法,該方法用于實現(xiàn)兩個整數(shù)相乘的遠程調用。接下來我們需要完成服務端的服務端口監(jiān)聽和連接建立, 參考代碼如下:

func main() {
    mathService := new(MathService)
    rpc.Register(mathService)

    listener, err := net.Listen("tcp", ":1234")
    if err != nil {
        log.Fatal("Listen error:", err)
    }

    for {
        conn, err := listener.Accept()
        if err != nil {
            log.Fatal("Accept error:", err)
        }
        go rpc.ServeConn(conn)
    }
}

在上面的main函數(shù)中, 我們注冊了一個MathService服務,并在本地監(jiān)聽1234端口,當接收到客戶端連接后, 使用rpc.ServeConn來處理RPC請求。

3.實現(xiàn)客戶端連接

客戶端連接服務端的參考代碼如下:

type Args struct {
  A, B int
}

func main() {
    client, err := rpc.Dial("tcp", "localhost:1234")
    if err != nil {
        log.Fatal("Dial error:", err)
    }

    args := &Args{7, 8}
    var reply int

    err = client.Call("MathService.Multiply", args, &reply)
    if err != nil {
        log.Fatal("MathService.Multiply error:", err)
    }

    fmt.Printf("MathService.Multiply: %d * %d = %d\n", args.A, args.B, reply)
}

先編譯服務端代碼并啟動, 然后執(zhí)行客戶端程序,結果如下:

圖片圖片

客戶端成功調用了服務端的遠程函數(shù)并收到結果。

4.利用gRPC框架實現(xiàn)服務端

gRPC(gRPC Remote Procedure Calls)是由Google開發(fā)的開源RPC(Remote Procedure Call,遠程過程調用)框架,其目標是在跨網(wǎng)絡的服務之間實現(xiàn)高效的通信。gRPC使用Protocol Buffers(protobuf)作為其接口描述語言,并支持多種編程語言,包括C++, Java, Python, Go, Node.js等。

首先需要安裝gRPC相關的包,通過以下命令安裝:

go get -u google.golang.org/grpc

接著需要安裝Protocol Buffers工具, 可以從這里直接下載最新版, 根據(jù)自己的操作系統(tǒng)類型選擇:

https://github.com/protocolbuffers/protobuf/releases

接下來需要安裝兩個包:

go install google.golang.org/protobuf/cmd/protoc-gen-go@latest

go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest

緊接著創(chuàng)建proto文件, 內容如下:

syntax = "proto3";

package grpcsample;
option go_package = ".";

message User {
  string id = 1;
  string name = 2;
  int32 age = 3;
}

service UserService {
  rpc GetUserById (UserRequest) returns (User);
  rpc AddUser (User) returns (User);
}

message UserRequest {
  string id = 1;
}

將上面的代碼生成文件, 文件名為: user.proto。

我這里將protoc二進制程序放到工程根目錄gosample下, 接著在命令行下輸入以下命令:

./protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative ./grpcsample/user.proto

該命令將把.proto文件內容生成對應的grpc Go代碼, 生成后將在grpcsample目錄下生成user.pb.go和user_grpc.pb.go文件,如圖:

圖片圖片

在grpcsample目錄下新建工程文件userservice.go, 加入以下代碼:

import (
  "context"
  "fmt"
)

var users = map[string]User{
  "1": {Id: "1", Name: "John Doe", Age: 30},
  "2": {Id: "2", Name: "Jane Doe", Age: 25},
}

type UserServer struct {
  UnimplementedUserServiceServer
}

func (s *UserServer) GetUserById(ctx context.Context, req *UserRequest) (*User, error) {
  user, exists := users[req.Id]
  if exists {
    return &user, nil
  }
  return nil, fmt.Errorf("User with ID %s not found", req.Id)
}

func (s *UserServer) AddUser(ctx context.Context, user *User) (*User, error) {
  users[user.Id] = *user
  return user, nil
}

上面的代碼提供了兩個RPC方法, GetUserById支持通過ID查詢對應的用戶信息, AddUser支持添加一個新的用戶。

接著添加服務端的主程序代碼:

import (
  "google.golang.org/grpc"
  pb "gosample/grpcsample"
)

func main() {
    listener, err := net.Listen("tcp", ":50051")
  if err != nil {
    log.Fatalf("Failed to listen: %v", err)
  }

  server := grpc.NewServer()
  pb.RegisterUserServiceServer(server, &pb.UserServer{})

  log.Println("gRPC server is running on port 50051")
  if err := server.Serve(listener); err != nil {
    log.Fatalf("Failed to serve: %v", err)
  }
}

在服務端主程序代碼中, 我們調用了grpcsample中的RegisterUserServiceServer方法注冊了一個服務,并在本地的50051端口監(jiān)聽客戶端連接。

5.生成gRPC客戶端

同樣的方式, 新打開一個工程, 按照服務端生成gRPC的方式生成客戶端的代碼, 如圖:

圖片圖片

在客戶端的主程序中利用如下代碼進行服務端方法調用:

package main

import (
  "context"
  "fmt"
  "log"

  "google.golang.org/grpc"
  "google.golang.org/grpc/credentials/insecure"

  pb "sampleclient/grpcsample"
)

func main() {
   conn, err := grpc.Dial("localhost:50051", grpc.WithTransportCredentials(insecure.NewCredentials()))
  if err != nil {
    log.Fatalf("Failed to connect: %v", err)
  }
  defer conn.Close()

  client := pb.NewUserServiceClient(conn)

  // 通過ID查詢用戶
  user, err := client.GetUserById(context.Background(), &pb.UserRequest{Id: "1"})
  if err != nil {
    log.Fatalf("Error getting user: %v", err)
  }
  fmt.Printf("User: %+v\n", user)

  // 添加一個新用戶
  newUser := &pb.User{Id: "3", Name: "Alice", Age: 28}
  addedUser, err := client.AddUser(context.Background(), newUser)
  if err != nil {
    log.Fatalf("Error adding user: %v", err)
  }
  fmt.Printf("Added User: %+v\n", addedUser)
}

在上面的代碼中, 首先通過grpc包中的Dial函數(shù)連接到本地50051端口, 并調用gRPC的方法NewUserServiceClient新建一個客戶端連接, 接著遠程調用了服務端的兩個方法。首先開啟服務端, 查看客戶端調用方法后的返回,如圖:

圖片圖片

可以看到,成功獲取到遠程的兩個方法返回的結果。

責任編輯:武曉燕 來源: 二進制空間安全
相關推薦

2020-11-02 08:19:18

RPC框架Java

2023-01-29 23:51:07

微服務框架Go

2024-01-02 13:58:04

GoREST API語言

2022-05-22 13:55:30

Go 語言

2021-10-19 08:58:48

Java 語言 Java 基礎

2018-09-18 09:38:11

RPC遠程調用網(wǎng)絡通信

2020-09-09 07:13:05

RPC框架

2022-03-01 11:38:51

RPC框架后端

2022-11-07 18:36:03

組件RPC框架

2021-02-20 09:45:02

RPC框架Java

2025-05-20 09:39:57

GogRPC微服務

2021-10-21 08:21:10

Java Reflect Java 基礎

2022-01-07 06:12:08

RPC框架限流

2017-04-11 16:16:48

HTTPS互聯(lián)網(wǎng)服務端

2021-10-14 08:39:17

Java Netty Java 基礎

2023-06-10 23:01:41

GrpcProtobuf數(shù)據(jù)

2021-06-10 07:49:26

RPCgRPC模式

2019-06-17 08:21:06

RPC框架服務

2012-10-10 09:14:50

PHPRPCPHP框架

2022-02-14 21:17:21

RPC框架協(xié)議
點贊
收藏

51CTO技術棧公眾號

日韩欧美电影一区| 国产喂奶挤奶一区二区三区| 欧美成在线视频| 日本少妇激三级做爰在线| 久操视频在线播放| 国产麻豆午夜三级精品| 欧美激情精品久久久久久久变态| wwwww在线观看| 九色porny丨国产首页在线| 99久久99久久精品免费观看| 国产成人精品一区二区| 91ts人妖另类精品系列| 亚洲高清999| 狠狠躁天天躁日日躁欧美| 日本免费高清一区二区| 国产乱码精品一区二区三区精东 | 日韩高清国产精品| 国产精品一二三四五区| 亚洲全部视频| 中国日韩欧美久久久久久久久| 国产亚洲视频一区| 草草视频在线| 国产精品美女一区二区| 99久热re在线精品视频| 日本一级黄色录像| 色综合五月天| 亚洲精品国产精品久久清纯直播| 91极品视频在线观看| 国产91足控脚交在线观看| 国产色91在线| 国产伦精品一区二区三区免费视频| 天天干天天干天天操| 亚洲精品在线观看91| 日韩精品视频在线| 三上悠亚 电影| 亚洲a∨精品一区二区三区导航| 国产日韩成人精品| 亚洲一区二区免费| 黄色片视频网站| 永久亚洲成a人片777777| 精品无人区乱码1区2区3区在线| 夜夜夜夜夜夜操| 麻豆国产在线| 亚洲最大色网站| 亚洲精品国产精品久久| 视频一区二区三区国产| 国产大片一区二区| 国产精品嫩草影院一区二区| 精品成人久久久| 午夜精品剧场| 久久精品国产免费观看| 无码 人妻 在线 视频| 欧美a一欧美| 日韩欧美中文字幕公布| www.超碰97.com| 欧美韩国亚洲| 欧美日韩亚洲精品一区二区三区| 狠狠干视频网站| 麻豆视频免费在线观看| 不卡的电视剧免费网站有什么| 成人亚洲激情网| 青青艹在线观看| 久久久久久自在自线| 久久乐国产精品| 国产一二三四在线| 国内精品久久久久久久影视麻豆| 免费av一区二区| 加勒比婷婷色综合久久| 仙踪林久久久久久久999| 日韩在线高清视频| 午夜剧场免费在线观看| 国产精品久久久久久久| 日韩小视频在线观看| 天堂av网手机版| 久久国产电影| 亚洲欧洲国产伦综合| 精品人妻一区二区免费| 成人av资源网址| 亚洲国产成人久久综合一区| 在线播放av网址| 日韩精品一区国产| 日韩欧美国产一区二区在线播放 | 激情综合网激情| 成人国产精品av| 国产chinasex对白videos麻豆| 国产河南妇女毛片精品久久久| 99中文字幕| 蜜桃在线一区二区| 91蜜桃在线免费视频| 欧美连裤袜在线视频| 国产一级片在线| 中文字幕在线免费不卡| 日本丰满大乳奶| 国产精品一区hongkong| 午夜在线电影亚洲一区| 男人天堂新网址| 精精国产xxxx视频在线野外| 色婷婷av一区| 色噜噜狠狠永久免费| 91视频成人| 欧美成人女星排名| 素人fc2av清纯18岁| 日韩理论片av| 欧美精品中文字幕一区| 日本少妇久久久| 久久这里有精品15一区二区三区| 国产精品亚洲片夜色在线| av网站免费大全| 91美女在线视频| 一区二区三区国产福利| 美女精品导航| 色国产综合视频| 国产xxxxhd| 一区三区在线欧| 久久久国产精品亚洲一区| 久久高清免费视频| 久久aⅴ国产欧美74aaa| 国产亚洲精品美女久久久m| 国产精品影院在线| 亚洲夂夂婷婷色拍ww47| 日本在线视频www| 欧美成人精品午夜一区二区| 日韩精品一区二区三区第95| 三级黄色在线观看| 国产日韩欧美三区| 成人国产在线视频| 日本一二三区在线视频| 亚洲欧美日韩小说| 免费在线观看的毛片| 超碰精品在线| 欧美成人精品在线视频| 久久久黄色大片| 成人午夜视频福利| 亚洲第一导航| 亚洲同志男男gay1069网站| 91精品国产综合久久精品| 中文字幕一区二区三区人妻不卡| 中文字幕人成人乱码| 国产va免费精品高清在线| 午夜精品无码一区二区三区| 日本一区二区免费在线观看视频| 中文字幕在线中文| 精品久久99| 亚洲摸下面视频| 国产午夜小视频| 麻豆91在线观看| 欧美第一黄网| 亚洲人成在线网站| 亚洲电影免费观看高清| 欧洲第一无人区观看| 日本不卡一区二区三区 | 国产日产精品一区二区三区四区的观看方式| 久久久国产精品x99av| 中文字幕人妻精品一区| 久久久久久99久久久精品网站| 久艹视频在线免费观看| 成人另类视频| 欧美激情亚洲综合一区| 国产精品一区二区免费视频| 国产精品美女久久久久久久| 四季av一区二区| 欧美精品乱码| 国产精品久久久久久久久免费看| 精品视频一二区| 色悠悠久久综合| 爱爱免费小视频| 亚洲欧美网站| 欧美高清视频一区| 电影久久久久久| 亚洲性无码av在线| 波多野结衣视频免费观看| 成人免费精品视频| 三级在线免费观看| 91成人入口| 久久777国产线看观看精品| av在线亚洲天堂| 中文字幕一区免费在线观看| 色呦色呦色精品| 一区二区三区在线电影| 91免费在线观看网站| 羞羞网站在线看| 日韩一区二区不卡| 欧美久久久久久久久久久久| 国产一二三精品| 欧美性受黑人性爽| 久久综合给合| 欧美激情网站在线观看| 欧美一级在线免费观看| 欧美天堂在线观看| 黄色三级生活片| 国产一区二区三区在线观看免费 | 蜜臀99久久精品久久久久小说| 国产午夜精品福利| 久久久精品高清| 激情欧美丁香| 青青草久久网络| 国产精品视频一区视频二区 | 羞羞网站在线免费观看| 亚洲国产精品视频在线观看| 国产成人免费观看视频| 欧美国产禁国产网站cc| 久久艹这里只有精品| 亚洲欧洲一级| 欧美二级三级| 久久av日韩| 91国产精品91| 波多野结衣在线影院| 日韩美一区二区三区| 天天干天天干天天干天天| 国产精品欧美一区二区三区| 久久久久久久久久毛片| 黄色精品免费| 亚洲国产日韩美| 第一区第二区在线| 国产欧美精品日韩| 欧美gv在线观看| 久久久久99精品久久久久| 性插视频在线观看| 91精品国产入口| 日韩欧美在线观看免费| 一区二区在线看| xxxx日本黄色| 成人黄色大片在线观看| 色乱码一区二区三区在线| 136国产福利精品导航网址| 午夜精品一区二区三区四区| 9l视频自拍蝌蚪9l视频成人| 国产欧亚日韩视频| 一区二区乱码| 欧美久久精品午夜青青大伊人| 欧美孕妇性xxxⅹ精品hd| 日韩一区二区在线免费观看| 精品成人无码久久久久久| 亚洲午夜av在线| 亚洲一级二级片| 久久无码av三级| 在线看黄色的网站| 国产高清一区日本| www.这里只有精品| 美女国产精品| 免费看又黄又无码的网站| 精品国产精品久久一区免费式| 精品视频第一区| 国产+成+人+亚洲欧洲在线| 亚洲一区二区三区777| 懂色aⅴ精品一区二区三区| 清纯唯美亚洲综合| 牛牛精品一区二区| 97碰碰碰免费色视频| 日本aa在线| 欧美国产精品va在线观看| 黄色av免费在线| 日韩中文字幕在线播放| 在线视频自拍| 中文字幕日韩高清| 97超碰人人在线| 国产偷亚洲偷欧美偷精品| 人妻一区二区三区| 亚洲丁香婷深爱综合| 懂色av蜜臀av粉嫩av分享吧| 日韩欧美在线1卡| 国产超碰人人模人人爽人人添| 欧美精品久久99| 国产精品嫩草影院精东| 欧美一区二区三区系列电影| 夜夜嗨av禁果av粉嫩avhd| 欧美日韩黄视频| 国产又粗又猛又爽又黄视频 | 亚洲午夜性刺激影院| 你懂的在线免费观看| 日韩中文在线中文网在线观看 | 国内精品久久久久久久影视简单| 日韩一区二区三区高清| 第一sis亚洲原创| 日本一区二区久久精品| 美女久久久久| 日本亚洲导航| 欧美日韩另类图片| 欧美高清性xxxxhdvideosex| 精品无人区麻豆乱码久久久| 亚洲午夜久久久影院伊人| 99精品视频在线| 亚洲精品一区国产精品| 亚洲字幕久久| 精品国偷自产一区二区三区| 一区二区三区四区五区在线| 日本熟妇人妻中出| 国产在线视频一区二区| 亚洲v在线观看| www国产亚洲精品久久麻豆| 欧美人妻一区二区三区| 亚洲三级在线免费观看| 国产一级黄色av| 欧美性猛交xxxx免费看漫画| 日本中文字幕在线观看视频| 7878成人国产在线观看| 国产91免费在线观看| 亚洲欧美精品伊人久久| 瑟瑟视频在线| 国产精品久久看| 成人免费a级片| 亚洲伊人网站| 99精品视频国产| 91丨porny丨国产| 污软件在线观看| 亚洲一区二区成人在线观看| 欧美精品一二三四区| 69精品人人人人| 成人免费观看在线视频| 亚洲无亚洲人成网站77777| 麻豆网站在线| 欧美综合国产精品久久丁香| 亚洲香蕉久久| 欧美日韩无遮挡| 国产精品九九| 国产福利在线免费| 91小视频免费观看| 精品国产视频一区二区三区| 欧美日韩免费在线| 国产视频在线观看视频| 国产婷婷色综合av蜜臀av| 在线中文免费视频| 欧美中文字幕在线观看| 国产一区二区三区免费观看在线 | 日产国产精品精品a∨| 国产精品超碰| 亚洲一区二区在线看| 国产精品亚洲综合色区韩国| 国产美女视频免费看| 国产色产综合产在线视频| 精品成人免费视频| 欧美图片一区二区三区| 天堂在线视频免费| 欧美二区乱c黑人| 小明成人免费视频一区| 精品在线不卡| 国语自产精品视频在线看8查询8| 亚洲色图久久久| 99久久伊人久久99| 国产乱码久久久久久| 91精品国产91久久综合桃花| 在线免费观看的av网站| 欧美在线视频在线播放完整版免费观看| 精品成人18| 伊人狠狠色丁香综合尤物| 美日韩精品视频| 老熟妇精品一区二区三区| 亚洲天堂福利av| 国产黄色免费视频| 日韩电影免费在线观看中文字幕| 99热国产在线| 91最新国产视频| 午夜免费一区| 亚洲在线观看网站| 亚洲欧洲中文日韩久久av乱码| 在线观看免费视频a| 在线播放国产一区中文字幕剧情欧美 | av影片在线一区| 97xxxxx| 久久久久久久国产精品影院| 欧美a视频在线观看| 亚洲片在线观看| 三上悠亚一区二区| 欧美激情论坛| 亚洲欧美日韩国产一区| 欧美亚一区二区三区| 亚洲成人tv网| 亚洲AV成人无码一二三区在线| 欧美极品美女电影一区| 欧洲大片精品免费永久看nba| 午夜探花在线观看| 国产成人免费视频一区| 国产精品99re| 亚洲欧美日韩国产中文| 户外露出一区二区三区| 日韩一区免费观看| 精品一区二区精品| 三级影片在线看| 日韩精品免费视频人成| 欧美伦理视频在线观看| 亚洲国产精品ⅴa在线观看| 一本色道久久综合无码人妻| 久久天天躁夜夜躁狠狠躁2022| 国产亚洲观看| 日本中文字幕网址| 国产欧美一区二区三区网站| 区一区二在线观看| 久久精品中文字幕电影| 成人h动漫精品一区二区器材| 国产真人做爰毛片视频直播| 91浏览器在线视频| 中文字幕乱码视频| 久久91精品国产91久久久| 国产精品tv| 日本久久精品一区二区| 亚洲色图视频免费播放| 日本黄色不卡视频| 国产精选久久久久久| 欧美日韩1区| www在线观看免费视频|