gRPC的介绍、安装与使用

本文介绍了gRPC,它能让客户端像调用本地对象一样调用服务端方法,便于创建分布式应用。还详细说明了gRPC环境的安装步骤,以及使用Go语言实现gRPC远程调用的过程,包括protobuf协议定义、服务端和客户端的代码编写与运行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.gRPC是什么?

    在 gRPC里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法,使得您能够更容易地创建分布式应用和服务。与许多 RPC系统类似, gRPC也是基于以下理念:
    定义一个服务,指定其能够被远程调用的方法(包含参数和返回类型)。在服务端实现这个接口,并运行一个 gRPC服务器来处理客户端调用。

2.gRPC环境安装

(1)进入GOPATH/src/目录下,打开终端输入:

         $ git clone https://github.com/junaozun/golang.org

         $ git clone https://github.com/junaozun/google.golang.org

(2)解压上面下载的两个压缩包,然后都放入GOPATH/src目录下

(3)测试环境是否安装完好:

            启动服务端:

                    $ cd $GOPATH/src/google.golang.org/grpc/examples/helloworld/greeter_server
                    $ go run main.go

            启动客户端:

                    $ cd $GOPATH/src/google.golang.org/grpc/examples/helloworld/greeter_client
                    $ go run main.go

            客户端显示hello world表示测试成功,如下图所示:

              

 3.go语言实现gRPC远程调用

     (1)protobuf协议定义

             a.在src目录下创建grpcProto目录,进入该目录下,创建一个grpcProto.proto文件,内容如下:

             

             b.调用protoc编译器,生成.pb.go文件,这里需要增加grpc插件,如下图所示: 
                    $ protoc --go_out=plugins=grpc:./ *.proto      //添加grpc插件

              

             c.我们打开grpcProto.pb.go文件,查看内容:

             

    (2)gRPC服务端

          在src目录下创建grpcGo目录,进入该目录下,创建一个grpcServer.go文件,内容如下:

package main

import (
	"context"
	"fmt"
	"google.golang.org/grpc"
	pd "grpcProto"
	"net"

)

type server struct {}

//打招呼的服务
//func(对象)函数名(context,客户端发送过来的参数)(返回给客户端的参数,错误)
func (this *server) Sayhello(ctx context.Context, in *pd.HelloReq) (out *pd.HelloRsp, err error){
	return &pd.HelloRsp{Msg:in.Msg+";你也好,我是服务端"},err
}
//说名字的服务
func (this *server) Sayname(ctx context.Context, in *pd.NameReq) (out *pd.NameRsp,err error){
	return &pd.NameRsp{Msg:in.Name+";我的名字叫服务端10010"},err
}

func main()  {

	//创建网络
	listener ,err := net.Listen("tcp","127.0.0.1:8080")
	if err != nil{
		fmt.Println("网络错误",err)
	}

	//创建grpc的服务
	ser := grpc.NewServer()

	//注册服务
	pd.RegisterHelloServerServer(ser,&server{})

	//等待网络连接
	fmt.Println("等待连接中.....")
	err = ser.Serve(listener)
	if err != nil{
		fmt.Println("网络错误",err)
	}




}

    运行服务端:

  

    (3)gRPC客户端 

   在src/grpcGo目录下,创建一个grpcClient.go文件,内容如下:           

package main

import (
	"context"
	"fmt"
	"google.golang.org/grpc"
	pd "grpcProto"
)

func main()  {

	//客户端连接服务器
	conn ,err := grpc.Dial("127.0.0.1:8080",grpc.WithInsecure())
	if err != nil{
		fmt.Println("网络异常",err)
	}
	defer conn.Close()

	//获取grpc句柄
	c := pd.NewHelloServerClient(conn)

	//通过句柄调用函数
	req1 ,err := c.Sayhello(context.Background(),&pd.HelloReq{Msg:"你好,我是客户端"})
	if err != nil{
		fmt.Println("Sayhello服务调用失败",err)
	}
	fmt.Println("调用sayhello函数:",req1.Msg)

	req2 ,err := c.Sayname(context.Background(),&pd.NameReq{Name:"我名字叫客户端10086"})
	if err != nil{
		fmt.Println("Sayname服务调用失败",err)
	}
	fmt.Println("调用sayname函数:",req2.Msg)
}

运行客户端:

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值