facebook的thrift也是开源rpc库,性能高出grpc一倍以上,grpc发展的较晚,期待以后有长足的进步。简单来说thrift = grpc + protobuf

gRPC基于HTTP/2标准设计,带来诸如双向流控、头部压缩、单TCP连接上的多复用请求等特性。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。

要求:

go version 版本最好1.7以上

protoc --version 版本最好3.1.0以上

go get -v google.golang.org/grpc

如果下载不了设置代理:(go get走的命令行代理,不是http代理!!!所以只开启shadowsocks是没用的)

windows:

set http_proxy=127.0.0.1:1080

set https_proxy=127.0.0.1:1080

linux:

export http_proxy=127.0.0.1:1080

export https_proxy=127.0.0.1:1080

proto文件

syntax = "proto3";

option java_multiple_files = true;
option java_package = "io.grpc.examples.helloworld";
option java_outer_classname = "HelloWorldProto";

  1.  

package helloworld;

  1.  

// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {}
}

  1.  

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

  1.  

// The response message containing the greetings
message HelloReply {
  string message = 1;
}

  1.  
  1. protoc -I helloworld/ helloworld/helloworld.proto --go_out=plugins=grpc:helloworld
  2. 注意:grpc插件,否则service不能运行,代码如下:

测试demo:

cd $GOPATH/src/google.golang.org/grpc/examples/helloworld

运行:

  1. 服务端代码:go run greeter_server/main.go
  2.  
  3. package main
  4.  
  5. import (
  6. "log"
  7. "net"
  8.  
  9. "golang.org/x/net/context"
  10. "google.golang.org/grpc"
  11. pb "google.golang.org/grpc/examples/helloworld/helloworld"
  12. "google.golang.org/grpc/reflection"
  13. )
  14.  
  15. const (
  16. port = ":50051"
  17. )
  18.  
  19. // server is used to implement helloworld.GreeterServer.
  20. type server struct{}
  21.  
  22. // SayHello implements helloworld.GreeterServer
  23. func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
  24. return &pb.HelloReply{Message: "Hello " + in.Name}, nil
  25. }
  26.  
  27. func main() {
  28. lis, err := net.Listen("tcp", port)
  29. if err != nil {
  30. log.Fatalf("failed to listen: %v", err)
  31. }
  32. s := grpc.NewServer()
  33. pb.RegisterGreeterServer(s, &server{})
  34. // Register reflection service on gRPC server.
  35. reflection.Register(s)
  36. if err := s.Serve(lis); err != nil {
  37. log.Fatalf("failed to serve: %v", err)
  38. }
  39. }
  1. 客户端代码:go run greeter_client/main.go
  2.  
  3. package main
  4.  
  5. import (
  6. "log"
  7. "os"
  8.  
  9. "golang.org/x/net/context"
  10. "google.golang.org/grpc"
  11. pb "google.golang.org/grpc/examples/helloworld/helloworld"
  12. )
  13.  
  14. const (
  15. address = "localhost:50051"
  16. defaultName = "world"
  17. )
  18.  
  19. func main() {
  20. // Set up a connection to the server.
  21. conn, err := grpc.Dial(address, grpc.WithInsecure())
  22. if err != nil {
  23. log.Fatalf("did not connect: %v", err)
  24. }
  25. defer conn.Close()
  26. c := pb.NewGreeterClient(conn)
  27.  
  28. // Contact the server and print out its response.
  29. name := defaultName
  30. if len(os.Args) > {
  31. name = os.Args[]
  32. }
  33. r, err := c.SayHello(context.Background(), &pb.HelloRequest{Name: name})
  34. if err != nil {
  35. log.Fatalf("could not greet: %v", err)
  36. }
  37. log.Printf("Greeting: %s", r.Message)
  38. }

参考网站:

http://www.grpc.io/docs/quickstart/go.html         上面代码的详细解释1
http://www.jianshu.com/p/774b38306c30           上面代码的详细解释2
http://www.cnblogs.com/YaoDD/p/5504881.html
https://github.com/tenywen/share

golang下的grpc的更多相关文章

  1. linux下安装grpc插件 (c++和go语言)

    在debian/ubuntu系统下,需要做如下准备操作: $ [sudo] apt-get install build-essential autoconf libtool pkg-config 如果 ...

  2. .NET Core下使用gRpc公开服务(SSL/TLS)

    一.前言 前一阵子关于.NET的各大公众号都发表了关于gRpc的消息,而随之而来的就是一波关于.NET Core下如何使用的教程,但是在这众多的教程中基本都是泛泛而谈,难以实际在实际环境中使用,而该篇 ...

  3. Golang下通过syscall调用win32的dll(calling Windows DLLs from Go )

    很多同学比如我虽然很喜欢golang,但是还是需要调用很多遗留项目或者其他优秀的开源项目,这时怎么办呢?我们想到的方法是用package里的syscall结合cgo 注意此处有坑: 在我调试时显示no ...

  4. centos 7下部署grpc

    gRPC 是一个高性能.开源和通用的 RPC 框架,面向移动和 HTTP/2 设计.目前提供 C.Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc-go. 其中 C 版 ...

  5. 如何在golang中打印grpc详细日志

    最近捣鼓fabric,在一个tls证书问题上纠结挺久,连接orderer服务时候,grpc日志总是冷冰冰的显示这个信息 Orderer Client Status Code: (2) CONNECTI ...

  6. C#语言下使用gRPC、protobuf(Google Protocol Buffers)实现文件传输

    初识gRPC还是一位做JAVA的同事在项目中用到了它,为了C#的客户端程序和java的服务器程序进行通信和数据交换,当时还是对方编译成C#,我直接调用. 后来,自己下来做了C#版本gRPC编写,搜了很 ...

  7. Golang下的Log处理

    原创文章转载请注明出处:@协思, http://zeeman.cnblogs.com 后端系统中的Log是相当重要的,做过高并发服务的同学都会认同这一点.相对而言,调试已经用处不大了,对于这样的项目, ...

  8. golang下划线(underscore) 总结

    一.概述 "_" 可以简单理解为赋值但以后不再使用,在golang中使用的比较多,使用的场合也很多,稍作总结: 二.场景 1.import import _ "net/h ...

  9. golang下使用ini配置文件(widuu/goini)

    在“widuu/goini”基础上进行了修改,增加了其他数据类型配置值(string.int.int32.int64.[]int.[]string)的支持. 使用方法: ConfigCentor := ...

随机推荐

  1. Python的平凡之路(14)

    一.什么是HTML HTML(Hyper Text Mark-up Language ) 即超文本标记语言,是 WWW 的描述语言,由 Tim Berners-lee提出.设计 HTML 语言的目的是 ...

  2. JQuery中$.ajax()方法参数都有哪些?

    url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如put和 ...

  3. 输入两个正整数m和n,求其最大公约数和最小公倍数

    public static void main(String[] args){  Scanner sc = new Scanner (System.in);  int a,b;  System.out ...

  4. Cookies的作用

    Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密).Cookies就是服务器暂存放在你的电脑里的资料(.tx ...

  5. UVA 1151二进制枚举子集 + 最小生成树

    题意:平面上有n个点(1<=N<=1000),你的任务是让所有n个点连通,为此, 你可以新建一些边,费用等于两个端点的欧几里得距离的平方.另外还有q(0<=q<=8)个套餐(数 ...

  6. BackTrack5-r3 w3af无法更新问题解决

    wget http://pypi.python.org/packages/source/p/pybloomfiltermmap/pybloomfiltermmap-0.2.0.tar.gz --no- ...

  7. vue学习笔记

    来公司以后就一直在用vue框架,不管是业务代码,还是做vue组件.关于vue有一些点是文档中没有提及的,记录一下以便以后查询- 一.Vue的特点 新一代 Vue.js 框架非常关注如何用极少的外部特性 ...

  8. 页面上常用的一些小功能--QQ、回到顶部

    1.QQ <script charset="utf-8" type="text/javascript" src="http://wpa.b.qq ...

  9. [转]Jenkins使用 管理节点

    现在我们已经搭建好了基本的Jenkins环境,在这一集里,我们说一说如何管理节点. 进入“系统管理”中的“管理节点”. 创建Windos系统的奴隶节点 先创建一台安装了Win7系统的虚拟机,作为Jen ...

  10. Easyui扩展icon下载

    链接:http://pan.baidu.com/s/1eS7bh0e 密码:owzp 来源:https://github.com/cjw0511/jquery-extensions