首页 > 其他分享 >go演示GRPC的用法

go演示GRPC的用法

时间:2023-06-30 16:37:14浏览次数:32  
标签:演示 log err GRPC calculator gRPC go grpc

首先,需要确保已经安装了Go编程语言和gRPC库。可以使用以下命令安装gRPC库:

go get -u google.golang.org/grpc

下面是一个基本的gRPC示例,其中包括服务器端和客户端。示例演示了一个简单的计算器服务,客户端可以发送两个数字给服务器,然后服务器返回它们的和。

首先,我们将定义一个.proto文件来定义gRPC服务和消息格式。创建一个名为calculator.proto的文件,并将以下内容添加到其中:

syntax = "proto3";

package calculator;

service CalculatorService {
  rpc Add(AddRequest) returns (AddResponse) {}
}

message AddRequest {
  int32 num1 = 1;
  int32 num2 = 2;
}

message AddResponse {
  int32 sum = 1;
}

接下来,我们使用以下命令生成gRPC代码:

protoc calculator.proto --go_out=plugins=grpc:.

这将生成calculator.pb.go文件,其中包含了gRPC服务和消息的Go定义。

接下来,我们将创建服务器端代码。创建一个名为server.go的文件,并将以下内容添加到其中:

package main

import (
	"context"
	"fmt"
	"log"
	"net"

	"google.golang.org/grpc"
	"calculator"
)

type server struct{}

func (s *server) Add(ctx context.Context, req *calculator.AddRequest) (*calculator.AddResponse, error) {
	num1 := req.GetNum1()
	num2 := req.GetNum2()
	sum := num1 + num2

	res := &calculator.AddResponse{
		Sum: sum,
	}

	return res, nil
}

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

	s := grpc.NewServer()
	calculator.RegisterCalculatorServiceServer(s, &server{})

	fmt.Println("Server listening on port 50051")
	if err := s.Serve(lis); err != nil {
		log.Fatalf("Failed to serve: %v", err)
	}
}

现在,我们将创建客户端代码。创建一个名为client.go的文件,并将以下内容添加到其中:

package main

import (
	"context"
	"fmt"
	"log"

	"google.golang.org/grpc"
	"calculator"
)

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

	c := calculator.NewCalculatorServiceClient(conn)

	req := &calculator.AddRequest{
		Num1: 5,
		Num2: 10,
	}

	res, err := c.Add(context.Background(), req)
	if err != nil {
		log.Fatalf("Error while calling Add RPC: %v", err)
	}

	fmt.Printf("Sum: %v\n", res.GetSum())
}

现在,可以通过运行以下命令来启动服务器:

go run server.go

然后,通过运行以下命令来运行客户端并调用gRPC服务:

go run client.go

标签:演示,log,err,GRPC,calculator,gRPC,go,grpc
From: https://www.cnblogs.com/DTCLOUD/p/17517154.html

相关文章

  • Django使用python的view创建a标签
    1、views文件deftestaa(request):#aa=[]foriinrange(1,10):aa='<ahref="">test</a>'aa='<ahref="http://www.baidu.com">百度链接</a></br>'#bb="<a......
  • python3的django创建api通过Postman进行端口测试
    1、打开pycharm创建工程及app  创建url  创建views函数:  fromdjango.shortcutsimportrender#Createyourviewshere.fromdjango.viewsimportViewfromdjango.utils.decoratorsimportmethod_decoratorfromdjango.views.decorators.csrfimportcsrf_exemptfr......
  • go爬虫 简单请求
     demo1.go packagemainimport("fmt""io/ioutil""net/http")funcfech(urlstring)string{client:=&http.Client{}req,_:=http.NewRequest("GET",url,nil)req.Header.Set(&quo......
  • MATLAB仿真Gough-Stewart并联机器人斯图尔特6自由度并联机器人逆运动学仿真 动力学控
    MATLAB仿真Gough-Stewart并联机器人斯图尔特6自由度并联机器人逆运动学仿真动力学控制pid控制1.搭建了六自由度Stewart并联机器人simulinksimscape仿真模型2.建立了逆向运动学仿真输入位置和姿态求解各个杆长3.运用pid控制器进行动力学跟踪控制使用MATLAB进行了Gough-Stewar......
  • docker部署mongodb副本集
    1.规格ip地址端口192.168.1.10127017192.168.1.10227017192.168.1.103270172.部署操作2.1 以下操作分别在三台不同的ECS服务器上操作[root@ecs-ff50-73e8-0002~]#mkdir/path/to-p[root@ecs-ff50-73e8-0002~]#cd/path/to/[root@ecs-ff50-73e8-0002to]#ls[root@ecs-ff50-73......
  • mongodb数据库操作备忘
    db.SMU_REALDATA_PARAMETERS.update({},{$rename:{"interfaceID":"INTERFACEID"}},false,true); 修改field,字段名,不是修改值哟。 网上搜索mongodb语言和CheatSheet手册。https://www.mongodb.com/developer/products/mongodb/cheat-sheet/navcate工具和下面工具都可以。 ......
  • Kubernetes编程——client-go基础—— 深入 API Machinery —— REST 映射
    深入APIMachinery——REST映射 GVK与GVR之间的映射关系被称为REST映射。我理解意思是说:在Kubernetes中,RESTMapping(REST映射)用于将GroupVersionKind(GVK)与GroupVersionResource(GVR)之间建立映射关系。......
  • go-选项卡模式
    packagemainimport"fmt"const(defaultNamestring="张建平"defaultAgeint=27defaultHighint=175)typeUserstruct{NamestringAgeintHighint}typeUserOptionsstruct{Namestring......
  • MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(8)-Ant Design Blazor前端
    前言前面的章节我们介绍了一些值得推荐的BlazorUI组件库,通过该篇文章的组件库介绍最终我选用AntDesignBlazor这个UI框架作为ToDoList系统的前端框架。因为在之前的工作中有使用过AntDesignVue、AntDesignAngular习惯并且喜欢AntDesign设计规范和风格,废话不多说今天我......
  • 10种经典的时间序列预测模型 本文演示了 10 种不同的经典时间序列预测方法
    [matlab]10种经典的时间序列预测模型本文演示了10种不同的经典时间序列预测方法,它们是1)自回归(AR)2)移动平均线3)自回归移动平均线4)自回归积分移动平均线(ARIMA)5)季节性自回归积分移动平均线(SARIMA)6)具有外生回归量的季节性自回归综合移动平均线(SARIMAX)......