golang使用grpc实现服务调用(入门级二)
学习目标
- 服务端编写
- 客户端编写
- 实现客户端调用服务端并返回数据
首先解决一下上个章节的作业(数组结构体)
通过关键字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的代码
这个是一个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)
}
客户端和服务端已经写好了,接下来我们运行它:
- 先启动服务端:
go run server.go
- 再启动客户端:
go run client.go
我这里文件名称是user.go - 这里大家可以看到,我们服务端回写的数据 ok 和200已经打印出来了
那么本章节的内容就到此结束啦!!!
再给大家留份作业:如何在web中集成grpc
- 后续将会和大家一起在gin中使用grpc,如果大家对gin不熟悉的留言或私信,中间会穿插gin使用
- 下个章节呢使用gin提供web服务,然后通过grpc对client提供服务