GRPC的简单应用

简介

GRPC是一个谷歌开源的一个可跨语言rpc框架,主要面向移动应用开发且基于HTTP/2协议标准而设计,同时支持大多数流行的编程语言。

在这里插入图片描述

参考介绍:链接

实现(参考官网实现)

官网参考链接:链接

按照插件
在这里插入图片描述

F:\golang\project\src\go_code\grpc>go install google.golang.org/protobuf/cmd/protoc-gen-go@v1.28

F:\golang\project\src\go_code\grpc>go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@v1.2
go: downloading google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.2.0
go: downloading google.golang.org/grpc v1.2.1

F:\golang\project\src\go_code\grpc>go get google.golang.org/grpc
go: downloading google.golang.org/grpc v1.47.0
go: downloading google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013
go get: upgraded google.golang.org/grpc v1.46.0 => v1.47.0

F:\golang\project\src\go_code\grpc>cd pb

F:\golang\project\src\go_code\grpc\pb>.\build.bat

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

hello_grpc.proto

syntax = "proto3";

//这是个坑,记得写上这句话
//这个go_package写的是包名,要对应上
option go_package="./;hello_grpc";

package hello_grpc;

message Req {
    string message = 1;
}

message Res {
    string message = 1;
}

service HelloGRPC {
    rpc SayHi(Req) returns (Res);
}

不加会报错:

在这里插入图片描述

build.bat(不要也可以,只是每次都需要输入这一大段。。。)

protoc --go_out=. --go_opt=paths=source_relative --go-grpc_out=. --go-grpc_opt=paths=source_relative ./hello_grpc.proto

client\main.go

package main

import (
	"context"
	"fmt"
	hello_grpc "go_code/grpc/pb"
	"google.golang.org/grpc"
	"google.golang.org/grpc/credentials/insecure"
)

func main() {
	conn,e := grpc.Dial("localhost:8888",grpc.WithTransportCredentials(insecure.NewCredentials()))
	fmt.Println(e)
	defer conn.Close()
	client := hello_grpc.NewHelloGRPCClient(conn)
	req,_ := client.SayHi(context.Background(),&hello_grpc.Req{Message: "我从客户端来"})
	fmt.Println(req.GetMessage())
}

server\main.go

package main

import (
	"context"
	"fmt"
	hello_grpc "go_code/grpc/pb"
	"google.golang.org/grpc"
	"net"
)

type server struct {
	hello_grpc.UnimplementedHelloGRPCServer
}

func (s *server) SayHi(ctx context.Context,req *hello_grpc.Req) (res *hello_grpc.Res,err error) {
	fmt.Println(req.GetMessage())
	return &hello_grpc.Res{Message: "我是从服务端返回的grpc内容"},nil
}

func main() {
	l, _ := net.Listen("tcp",":8888")
	s := grpc.NewServer()
	hello_grpc.RegisterHelloGRPCServer(s,&server{})
	s.Serve(l)
}

结果:

在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值