精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产一区二区久久精品| 色爱综合区网| 高清不卡一区| 国产亚洲福利| 日韩一区二区免费在线电影| 蜜桃久久精品乱码一区二区 | av一级在线观看| 日本三级在线播放完整版| 国产情侣一区| 日韩最新中文字幕电影免费看| 国产日产欧美视频| 日本人妻熟妇久久久久久 | 黄色影视在线观看| 久热精品在线观看视频| 99视频免费看| 欧美hd在线| 亚洲第一主播视频| 亚洲在线第一页| 久久一级免费视频| 成人av色网站| 日本一区二区在线不卡| 日韩av手机在线| 香蕉视频黄色在线观看| 天堂av中文在线观看| 成人av在线一区二区| 欧美放荡办公室videos4k| 成人性生交视频免费观看| 免费a级人成a大片在线观看| 久久av资源站| 日韩午夜在线视频| 韩国三级hd两男一女| 丰满大乳少妇在线观看网站| 丁香桃色午夜亚洲一区二区三区| 欧美理论片在线观看| 久草福利在线观看| a'aaa级片在线观看| 99国产一区二区三精品乱码| 69影院欧美专区视频| 特级西西人体4444xxxx| 网友自拍亚洲| 国产目拍亚洲精品99久久精品| av一区二区三区四区电影| 亚洲精品午夜久久久久久久| 老司机精品在线| 亚洲va国产天堂va久久en| 精品国产电影| 久草热在线观看| 天天综合一区| 精品国产一区二区精华| 精品视频免费在线播放| 浮生影视网在线观看免费| 久久97超碰色| 国产精品日日做人人爱| 超碰手机在线观看| 欧美电影完整版在线观看| 欧美日韩一区二区在线播放| 欧美日韩精品免费观看视一区二区| 国产美女www爽爽爽| 欧美专区18| 日韩在线观看精品| 中国美女黄色一级片| 欧美片网站免费| 狠狠躁夜夜躁久久躁别揉| 日本xxxxxxxxxx75| 在线看av的网址| 国产69精品久久777的优势| 日本老师69xxx| 日本午夜精品理论片a级app发布| 亚洲一级二级| 一本色道久久88精品综合| 成人性生交视频免费观看| 成人在线视频区| 欧美一区二区在线不卡| 久久美女福利视频| 国产在线看片| 久久久久久9999| 99re在线观看| 成人黄色在线观看视频| 日韩高清不卡一区二区三区| 九色精品美女在线| 精品97人妻无码中文永久在线| 自拍偷拍一区| 欧美xxxx老人做受| 一区二区三区入口| 国产激情视频在线看| **性色生活片久久毛片| 久久久久久国产精品一区| 91丨九色丨丰满| 久久一区国产| 国内精品久久久久久影视8| 亚洲一二三四五六区| 66视频精品| 中文字幕亚洲欧美日韩在线不卡| 国产精品无码电影| 国产九一精品| 亚洲精品久久久久| 亚洲熟妇一区二区| 国产精品白丝久久av网站| 日韩精品在线一区二区| 日韩视频在线观看一区二区三区| 51亚洲精品| 欧美一区二区三区视频在线观看| www日本在线观看| 免费黄色成人| 亚洲老司机av| 性色av蜜臀av色欲av| 成人在线tv视频| 欧美白人最猛性xxxxx69交| 美国黄色一级毛片| 性xxxx欧美老肥妇牲乱| 国产91精品高潮白浆喷水| 国产无遮挡又黄又爽在线观看| 欧美日韩a区| 欧美另类极品videosbestfree| 日本三级网站在线观看| 精彩视频一区二区| 成人国产精品av| 在线观看亚洲国产| 久久69国产一区二区蜜臀| 国产亚洲欧美一区二区| 亚洲美女性生活| 高清不卡一区二区| 亚洲第一在线综合在线| 97在线观看免费观看高清| 亚洲第一狼人社区| 天堂网成人在线| 综合久久成人| 日韩亚洲精品电影| 无码人妻精品一区二| 成人午夜又粗又硬又大| 日本三日本三级少妇三级66| 国产成人精品亚洲日本在线观看| 欧美午夜电影在线播放| 亚洲77777| 校园春色另类视频| 一区二区三区亚洲| 欧美一级特黄视频| 日本最新不卡在线| 国产专区精品视频| 国产成人精品av在线观| 欧美激情中文不卡| 可以免费观看av毛片| 韩国精品视频在线观看| 91精品免费在线| 好男人香蕉影院| 精品在线播放| 欧美一区二区三区免费视| 日日夜夜精品免费| 国产欧美久久久精品影院| 91国视频在线| 欧美激情三区| 日韩在线视频导航| 国产精品99精品| 懂色av一区二区夜夜嗨| 菠萝蜜视频在线观看入口| 天堂中文在线播放| 精品爽片免费看久久| chinese全程对白| 影院欧美亚洲| av成人在线电影| 免费在线中文字幕| 在线观看91精品国产入口| 亚洲天堂网2018| 成人av婷婷| 久久久久久久一区二区| 中文字幕有码视频| 成人深夜福利app| 欧美一级欧美一级| 欧美在线导航| 国产97在线|亚洲| 伊人免费在线| 日韩视频一区二区三区在线播放| 中文字幕在线有码| 日韩电影免费一区| 亚洲一卡二卡三卡| 黄色成人免费网| 欧美r级电影在线观看| 国产黄色片视频| 久久久亚洲欧洲日产国码αv| 亚洲精品怡红院| 大桥未久女教师av一区二区| 深夜福利国产精品| 精品人妻av一区二区三区| 亚洲成人动漫精品| 日本一级免费视频| 一区二区三区四区五区在线| 91亚洲精品在线| av在线电影免费观看| 天天av天天翘天天综合网色鬼国产| 午夜精品免费看| 成人毛片免费看| 日本精品视频网站| 麻豆传媒在线免费| 亚洲黄色成人网| 伊人网免费视频| 亚洲国产综合色| 久久久久国产免费| 亚洲成人免费| 久久综合狠狠综合久久综青草| 亚洲成人av观看| 亚洲男人天堂九九视频| 一级片一区二区三区| 午夜精品爽啪视频| 中文字幕av久久爽一区| 日韩精品亚洲一区| 妞干网视频在线观看| 久久av网站| 日韩av123| 美女尤物在线视频| 亚洲欧美激情一区| 乱色精品无码一区二区国产盗| 在线视频国内一区二区| 国产精品不卡av| 亚洲视频香蕉人妖| 在线播放免费视频| 久久亚洲不卡| 日韩欧美不卡在线| 亚洲男女av一区二区| 91系列在线观看| 电影亚洲精品噜噜在线观看| 久久久久国产精品www| 拍真实国产伦偷精品| 亚洲欧美日韩一区在线| 日本黄色不卡视频| 欧美一区永久视频免费观看| 中文字幕理论片| 欧美日韩中国免费专区在线看| 亚洲午夜久久久久久久久红桃| 国产精品中文字幕欧美| 精品国产一区二区三区无码| 九九热hot精品视频在线播放| 成人精品一区二区三区电影黑人| 日本电影欧美片| 性欧美激情精品| 黄色影院在线播放| 欧美视频日韩视频在线观看| 永久免费看mv网站入口78| 日韩高清不卡在线| 亚洲中文字幕无码中文字| 韩日成人在线| 欧美日韩亚洲一区二区三区在线观看| 亚洲成人五区| 日本精品免费一区二区三区| 九色porny丨首页入口在线| 亚洲人成网站免费播放| 一区不卡在线观看| 欧美色视频在线观看| 中文字幕精品无| 色婷婷国产精品| 实拍女处破www免费看| 91在线一区二区| 亚洲精品乱码久久久久久久| 99久精品国产| 精品人妻一区二区三区香蕉| 久久亚洲春色中文字幕久久久| 污污网站免费观看| 蜜臀av在线播放一区二区三区| wwwwww欧美| 极品尤物久久久av免费看| 福利视频一区二区三区四区| 99精品视频网| 国产一区视频免费观看| 日韩成人伦理电影在线观看| 日韩一区二区三区不卡视频| 精品午夜一区二区三区在线观看| 国产毛片久久久久久| 成人免费观看视频| 欧美 日本 国产| 国产免费成人在线视频| 999精品在线视频| 亚洲国产欧美在线| 亚洲欧美综合自拍| 亚洲欧美一区二区三区国产精品| 天天操天天操天天操天天操天天操| 伊人一区二区三区| 懂色av蜜臀av粉嫩av永久| 中文字幕一区二区三| 亚洲成人日韩在线| 国产精品蜜臀av| 性欧美丰满熟妇xxxx性仙踪林| 国产亚洲欧美日韩俺去了| 国产精品成人免费一区久久羞羞| www.欧美日韩国产在线| 樱花草www在线| 成人黄色av电影| 成人无码av片在线观看| 亚洲欧美日韩国产手机在线 | 久久久久九九精品影院| 国产一区免费| 水蜜桃久久夜色精品一区| 欧妇女乱妇女乱视频| 三级久久三级久久| 老女人性生活视频| 国产三级精品在线| 久久久久久久久毛片| 欧美日韩亚洲天堂| 国产日本精品视频| 欧美福利视频一区| 中文字幕在线一| 精品国精品国产| √天堂资源地址在线官网| 国内精品久久久久伊人av| 久久电影天堂| 久久久国产精品一区二区三区| 久久亚洲专区| 日日摸日日碰夜夜爽av | 国产精品伦子伦| 亚洲色图清纯唯美| 男操女视频网站| 在线日韩国产精品| 蜜臀久久99精品久久久| www.久久久久| 蜜臀国产一区| 国产亚洲福利社区| 欧美激情麻豆| 国产av熟女一区二区三区| 日韩成人一区二区| 香蕉视频黄色在线观看| 亚洲一区二区三区四区在线免费观看| 最近日韩免费视频| 亚洲乱码国产乱码精品精天堂| 亚洲电影视频在线| 国产中文字幕日韩| 成久久久网站| 日本老熟妇毛茸茸| 久久精品久久99精品久久| www.午夜av| 欧美国产日韩在线观看| 丰满人妻老熟妇伦人精品| 亚洲第一精品久久忘忧草社区| 欧美视频在线观看一区二区三区| 久久精品久久精品亚洲人| 女囚岛在线观看| 亚洲iv一区二区三区| 久久综合国产| 日本黄大片一区二区三区| 欧美韩日一区二区三区四区| 五月婷婷六月婷婷| 亚洲视频在线播放| 666av成人影院在线观看| 奇米888一区二区三区| 久久一区二区三区电影| 男女啪啪网站视频| 久久精品人人爽人人爽| 免费av网站在线| 日韩国产精品亚洲а∨天堂免| 精品一二三区视频| 国产91精品高潮白浆喷水| 一道本一区二区三区| 青青艹视频在线| 久久蜜桃香蕉精品一区二区三区| 69视频免费在线观看| 亚洲精品视频免费| 日韩在线短视频| 偷拍盗摄高潮叫床对白清晰| 一区二区精品| 亚洲成人日韩在线| 欧美中文字幕一区| 日本免费在线视频| 亚洲www在线观看| 精品成人免费| 性色av蜜臀av色欲av| 在线欧美日韩精品| 日本不卡不卡| 99re在线观看视频| 亚洲精品专区| 黄色片免费网址| 一区二区三区波多野结衣在线观看| 欧美超碰在线观看| 中文字幕一区电影| 欧美黄色一级| 国产女大学生av| 欧美激情一区二区三区| 国产普通话bbwbbwbbw| 欧美尺度大的性做爰视频| 欧美aaa视频| 中文字幕一区二区三区5566| 久久婷婷久久| 久久精品日韩无码| 精品国产91久久久久久久妲己| 激情都市亚洲| 亚洲啊啊啊啊啊| 精品中文字幕一区二区| 一区二区视频免费看| 日韩av在线免播放器| 欧美成人免费全部网站| 黄色一级片国产| 26uuu精品一区二区| 国产极品美女高潮无套嗷嗷叫酒店| 日韩精品中文字幕有码专区 | 高清日韩一区| 我不卡伦不卡影院| 欧美性生交xxxxx| 在线观看av一区| 黄页网站在线观看免费| 涩涩日韩在线| 免费黄网站欧美| 久久亚洲成人av| 精品国产伦一区二区三区观看体验| 伊人久久视频|