golang grpc demo
1.grpm 安装:
git clone https://github.com/grpc/grpc-go.git $GOPATH/src/google.golang.org/grpc
2.proto, protoc-gen-go 安装:
go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
3.protoc 安装:
git clone https://github.com/protocolbuffers/protobuf.git
cd $GOPATH/src/github.com/protocolbuffers/
./autogen.sh
./configure
make -j12
make install
4.go-genproto 安装(运行时需要的依赖,下载完移动到相应的目录里面)
git https://github.com/googleapis/go-genproto.git
5.protoc 查看版本:
[root@wangjq]# protoc --version
libprotoc 3.10.
6.目录结构:
[root@wangjq demo]# tree
.
├── client
│ └── main.go
├── example
│ └── data.proto
└── server
└── main.go directories, files
7.data.proto 内容如下
syntax = "proto3"; //指定proto版本 package proto; //定义请求结构
message HelloRequest{
string name=;
} //定义响应结构
message HelloReply{
string message=;
} //定义Hello服务
service Hello{
//定义服务中的方法
rpc SayHello(HelloRequest) returns (HelloReply){}
}
8.生成 data.pb.go 文件
protoc -I . --go_out=plugins=grpc:. ./data.proto
9.服务端代码
package main import (
pb "demo/example"
"fmt"
"golang.org/x/net/context"
"google.golang.org/grpc"
"net"
) const (
//gRPC服务地址
Address = "127.0.0.1:50052"
) //定义一个helloServer并实现约定的接口
type helloService struct{} func (h helloService) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
resp := new(pb.HelloReply)
resp.Message = "hello" + in.Name + "."
return resp, nil
} var HelloServer = helloService{} func main() {
listen, err := net.Listen("tcp", Address)
if err != nil {
fmt.Printf("failed to listen:%v", err)
} //实现gRPC Server
s := grpc.NewServer()
//注册helloServer为客户端提供服务
pb.RegisterHelloServer(s, HelloServer) //内部调用了s.RegisterServer()
fmt.Println("Listen on" + Address) s.Serve(listen)
}
10.客户端代码
package main import (
pb "demo/example"
"fmt"
"golang.org/x/net/context"
"google.golang.org/grpc"
) const (
Address = "127.0.0.1:50052"
) func main() {
//连接gRPC服务器
conn, err := grpc.Dial(Address, grpc.WithInsecure())
if err != nil {
fmt.Println(err)
}
defer conn.Close() //初始化客户端
c := pb.NewHelloClient(conn) //调用方法
reqBody := new(pb.HelloRequest)
reqBody.Name = "gRPC"
r, err := c.SayHello(context.Background(), reqBody)
if err != nil {
fmt.Println(err)
}
fmt.Println(r.Message)
}
11.运行测试
服务端运行:
[root@wangjq demo]# go run server/main.go
Listen on127.0.0.: 客户端运行:
[root@wangjq demo]# go run client/main.go
hellogRPC.
golang grpc demo的更多相关文章
- golang 并发demo 写入 redis
原文链接:golang 并发demo 写入 redis 源代码: package main import ( "fmt" "runtime" "str ...
- Golang gRPC调试工具
目录 Golang gRPC调试工具 1. 命令行工具 grpcurl 1.1 安装 1.2 验证 1.3 注册反射 1.4 使用示例 2. web调试工具grpcui 2.1 安装 2.2 验证 2 ...
- golang gRPC初探
gRPC使用protocol buffers作为Interface Definition Language (IDL). gRPC的底层信息交互格式也使用的是protocol buffers. 默认情 ...
- Golang gRPC学习(04): Deadlines超时限制
为什么要使用Deadlines 当我们使用gRPC时,gRPC库关系的是连接,序列化,反序列化和超时执行.Deadlines 允许gRPC客户端设置自己等待多长时间来完成rpc操作,直到出现这个错误 ...
- Golang gRPC 示例
1.安装gRPC runtime go get google.golang.org/grpc 为了自动生成Golang的gRPC代码,需要安装protocal buffers compiler以及对应 ...
- Golang gRPC 和 gRPC-gateway 结合使用
一.安装 go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway go get -u github.com/g ...
- Golang gRPC 使用
一.概念 1.gRPC默认使用protocol buffers,这是google开源的一套成熟的结构数据序列化机制(当然也可以使用其他数据格式如JSON),可以用proto files创建gRPC服务 ...
- [golang grpc] 框架介绍
官方网站 http://www.grpc.io/ http://www.grpc.io/docs/quickstart/go.html grpc安装 • go安装 目前grpc需要go 1.5以上版本 ...
- win7环境下,golang thrift demo代码编译不通过
用官方的教程代码:http://thrift.apache.org/tutorial/go 用网友提供的代码:Golang RPC 之 Thrift 都出现如下情况 状况1: 编辑器中就会提醒 Can ...
随机推荐
- 在CentOS下安装两个Tomcat
在CentOS下安装两个Tomcat [版权声明:本文为博主原创文章,转载请说明出处.希望能和大家共同学习] 1.不同的tomcat启动和关闭监听不同的端口 2.不同的tomcat的启动文件start ...
- linux杂七杂八
反斜线\用于命令换行,在\之后应该直接回车换行 [root@CentOS7- ~]# cp /etc/sysconfig/network-scripts/ifcfg-ens33\ > /tmp/ ...
- statsmodels 示例
Statsmodels 示例 https://www.statsmodels.org/stable/examples/index.html
- More JOIN operations -- SQLZOO
The JOIN operation 注意:where语句中对表示条件的需要用单引号, 下面的译文使用的是有道翻译如有不正确,请直接投诉有道 01.List the films where the y ...
- PHP is_callable() 函数
is_callable() 函数用于检测函数在当前环境中是否可调用.高佣联盟 www.cgewang.com is_callable() 函数验证变量的内容能否作为函数调用. 这可以检查包含有效函数名 ...
- PHP strrchr() 函数
实例 搜索 "world" 在字符串中的位置,并返回从该位置到字符串结尾的所有字符: <?php高佣联盟 www.cgewang.comecho strrchr(" ...
- 学习vue.js (一)
MVVM模式 MVVM是Model-View-ViewModel的简写,即模型-视图-视图模型.当View(视图层)变化时,会自动更新到ViewModel(视图模型),反之也一样,View和ViewM ...
- 如果你大学上过编程课,一定被老师提醒过:不要使用 goto 语句!
如果你上过编程课,一定被老师提醒过:不要使用goto语句! 因为goto语句不仅让代码的可读性很差,随意的跳出还会给程序带来安全隐患. 但是这种几乎被现代编程明令禁止的语句,在计算机诞生之初却司空见惯 ...
- SET DYNAMICS 365 COLORS AND LOGO USING THEMES
https://carldesouza.com/dynamics-365-colors-logo-themes/ BEFORE WE START, I NEED YOUR HELP. I AM SPE ...
- Struts2中Get请求转码问题
Tomcat默认编码为ISO859-1 Post提交时,struts2会对其转码为iso8859-1,因此不需要另外转码,而 Get提交表单,则需要单独转码,转码过程如下图: