golang grpc服务

.proto协议文件

// 版本
syntax = "proto3";
// 指定包名
package protoser;
// 文件生成位置
option go_package = "./protoser";

//
service ListenService {
  rpc ListenServerEth (Req) returns (Res) {}
}


message Req {
  string addr =1;
}

message Res {
  string msg = 1;
}

makefile

SHELL=PATH='$(PATH)' /bin/sh

.PHONY: all
# protoc  用于将proto文件编程成各种语言源码文件的工具
# 生成对应语言代码工具
#go get google.golang.org/protobuf/cmd/protoc-gen-go
#go get google.golang.org/grpc/cmd/protoc-gen-go-grpc
#grpc
all:
	protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative ./listen.proto
	# protoc --go-grpc_out=plugins=grpc:./ --go_opt=paths=source_relative listen.proto

server端

type ListenEth struct {
	// 必须嵌入,以具有向前兼容的实现
	protoser.UnimplementedListenServiceServer
}
// 服务接口,用于给grpc注册
var ListenEthInstance = &ListenEth{}

// 服务方法
func (l *ListenEth) ListenServerEth(context.Context, *protoser.Req) (*protoser.Res, error) {

	return &protoser.Res{
		Msg: "call success",
	}, nil
}




type GrpcServer struct {
}
服务管理
func NewGrpcserver() *GrpcServer {
	return &GrpcServer{}
}

func (g *GrpcServer) StartListenGrpc() error {
	l, err := net.Listen("tcp", ":8080")
	if err != nil {
		// panic(err)
		return err
	}
	// 初始化grpc服务
	server := grpc.NewServer()
	// 服务注册
	protoser.RegisterListenServiceServer(server, ListenEthInstance)
	// Register在给定的gRPC服务器上注册服务器反射服务
	reflection.Register(server)
	if err := server.Serve(l); err != nil {
		//panic(err)
		return err
	}
	return nil
}


对外服务

type GrpcListenServer struct {
	GServer *grpcser.GrpcServer
}

func NewGrpcListenServer() *GrpcListenServer {
	g := grpcser.NewGrpcserver()
	return &GrpcListenServer{
		GServer: g,
	}
}

func (g *GrpcListenServer) StartGrpcDaemon() {
	if err := g.GServer.StartListenGrpc(); err != nil {
		panic(err)
	}
}

main 启动

func main() {
	if err := rootCmd.Execute(); err != nil {
		panic(err)
	}
	//server.SingleListenServer().StartDaemon()
}

// 需要实现cmdStructName下的Run成员变量
func mainRun(cmd *cobra.Command, args []string) {
	// 启动listenServer
	// server.SingleListenServer().StartDaemon()
	// 启动grpc
	server.NewGrpcListenServer().StartGrpcDaemon()
	// expectSignal()
}

测试

func TestListenServerEth(t *testing.T) {
	var serviceHost = "127.0.0.1:8080"
	conn, err := grpc.Dial(serviceHost, grpc.WithTransportCredentials(insecure.NewCredentials()))
	if err != nil {
		panic(err)
	}
	client := protoser.NewListenServiceClient(conn)
	var res *protoser.Res
	res, err = client.ListenServerEth(context.TODO(), &protoser.Req{})
	if err != nil {
		panic(err)
	}
	fmt.Println(res.Msg)
}
=== RUN   TestListenServerEth
call success
--- PASS: TestListenServerEth (0.00s)
PASS
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值