go下的grpc和protocol buffer体验

1、grpc简介

Github地址: https://github.com/grpc/grpc

  • gRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2 设计。
  • 目前提供 C、Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc-go。
  • 其中 C 版本支持 C, C++, Node.js, Python, Ruby, Objective-C, PHP 和 C# 支持。

2、protocol buffer简介

  • Protocol Buffer 其实是Google出品的一种轻量 & 高效的结构化数据存储格式,性能比 Json、XML 强很多!

在这里插入图片描述

3、下载protoc工具,用户根据自定义protobuf配置文件生成相应的代码

protoc Github下载地址:https://github.com/protocolbuffers/protobuf/releases

说明:下载完成后,根据计算机系统设置好环境变量

4、下载go的依赖包

go get github.com/golang/protobuf/protoc-gen-go

5、grpc开发体验

5.1 定义helloworld的proto配置文件,并使用工具命令生成go文件(与Python不同的是,go只会生成一个文件,python是两个文件)

helloworld.proto

syntax = "proto3";

// 指定包名
option go_package = "../proto";

service Greeter{
  rpc SayHello (HelloRequest)returns(HelloReply);
}

message HelloRequest{
  string name = 1;
}

message HelloReply{
  string message = 1;
}

6、使用工具生成rpc文件

protoc -I . helloworld.proto --go_out=plugins=grpc:.

# --go_out=plugins=grpc:. 指定生成的文件都在当前目录

7.下载grpc包

go get google.golang.org/grpc

8、服务端

server.go

package main

import (
	"context"
	"demo/grpc_test/proto"
	"google.golang.org/grpc"
	"net"
)

type Server struct {
}

func (s *Server) SayHello(c context.Context, r *proto.HelloRequest) (*proto.HelloReply, error) {
	return &proto.HelloReply{
		Message: "hello," + r.Name,
	}, nil
}

func main() {
	g := grpc.NewServer()

	// Server定义的是指针,这边需加上"&"
	proto.RegisterGreeterServer(g, &Server{})

	lis, err := net.Listen("tcp", "0.0.0.0:8080")
	if err != nil {
		panic("listen failed: " + err.Error())
	}

	err = g.Serve(lis)
	if err != nil {
		panic("grpc start failed: " + err.Error())
	}
}

客户端

client.go

package main

import (
	"context"
	"demo/grpc_test/proto"
	"fmt"
	"google.golang.org/grpc"
)

func main() {
	conn, err := grpc.Dial("127.0.0.1:8080", grpc.WithInsecure())
	if err != nil {
		panic("connect failed")
	}

	defer func() {
		_ = conn.Close()
	}()

	c := proto.NewGreeterClient(conn)

	r, err := c.SayHello(context.Background(), &proto.HelloRequest{
		Name: "jason",
	})
	if err != nil {
		panic(err)
	}

	fmt.Println(r.Message)
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JasonHome

你的鼓励是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值