golang使用grpc实现服务调用(入门级二)

学习目标

  1. 服务端编写
  2. 客户端编写
  3. 实现客户端调用服务端并返回数据

首先解决一下上个章节的作业(数组结构体)通过关键字repeated 来定义说明:上一章节的proto内容被博主增加了其他信息,所以今天列子是新写的,可能和上个文件存在出入

接下来我们一起来通过golang代码实现服务端和客户端的编写

上节和大家一起做了pd.go文件生成,那么我们怎么利用这个文件做交互呢?
以下为客户端代码:

func main()  {
 // 连接服务端地址
 conn,err:=grpc.Dial("127.0.0.1:8888",grpc.WithInsecure())
 if err !=nil{
 	panic(err)
 }
 // 执行完成调用关闭连接释放资源
 defer conn.Close()
 // 导入pb.go方法创建客户端
 client:=p.NewUserServiceClient(conn)
 // 通过构建client调用并且传输请求参数
 rep,err:=client.GetUserResponse(context.Background(),&p.RequestUser{Name: "xiaofeige"})
 if err !=nil{
 	panic(err)
 }
 // 打印服务端返回值
 fmt.Println(rep.Response,rep.HttpCode)
}

然后在边写服务端代码

编写之前呢 要带大家看一下pb.go的代码

grpc服务端开启日志 grpc服务端调用客户端_grpc服务端开启日志


这个是一个interface 上面也有注释说明是一个服务的api,那么我们在编写服务端的时候一定要去实现这个接口

// 创建空结构体放置内置方法实现GetUserResponse 接口
type server struct {

}

// 实现GetUserResponse接口
func (s *server)GetUserResponse(ctx context.Context,response *p.RequestUser)(*p.ResponseUser,error){
	fmt.Println(response)
	return &p.ResponseUser{HttpCode: 200,Response: "ok.."},nil
}

func main(){
	// 监听服务
	listen,err:=net.Listen("tcp",":8888")
	if err !=nil{
		panic(err)
	}
	// 创建server
	srv:=grpc.NewServer()
	// 将server 注册到grpc服务中并有实现接口方法
	p.RegisterUserServiceServer(srv,&server{})
	// 对该注册服务反射
	reflection.Register(srv)
	// 启动该服务
	srv.Serve(listen)
}

客户端和服务端已经写好了,接下来我们运行它:

  1. 先启动服务端: go run server.go
  2. 再启动客户端: go run client.go 我这里文件名称是user.go
  3. grpc服务端开启日志 grpc服务端调用客户端_grpc服务端开启日志_02

  4. 这里大家可以看到,我们服务端回写的数据 ok 和200已经打印出来了
    那么本章节的内容就到此结束啦!!!

再给大家留份作业:如何在web中集成grpc

  1. 后续将会和大家一起在gin中使用grpc,如果大家对gin不熟悉的留言或私信,中间会穿插gin使用
  2. 下个章节呢使用gin提供web服务,然后通过grpc对client提供服务