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. 为什么匿名内部类参数必须为final类型

    1)  从程序设计语言的理论上:局部内部类(即:定义在方法中的内部类),由于本身就是在方法内部(可出现在形式参数定义处或者方法体处),因而访问方法中的局部变量(形式参数或局部变量)是天经地义的.是很自 ...

  2. android SDK 更新问题解决

    Android在win7更新SDK时出现问题: Download interrupted: hostname in certificate didn't  match: <dl-ssl.goog ...

  3. YARN资料收集

    hdfs2的HA:  http://www.cnblogs.com/meiyuanbao/p/hadoop2.html

  4. [转]使用Scrapy建立一个网站抓取器

    英文原文:Build a Website Crawler based upon Scrapy 标签: Scrapy Python 209人收藏此文章, 我要收藏renwofei423 推荐于 11个月 ...

  5. HDU 4336 容斥原理 || 状压DP

    状压DP :F(S)=Sum*F(S)+p(x1)*F(S^(1<<x1))+p(x2)*F(S^(1<<x2))...+1; F(S)表示取状态为S的牌的期望次数,Sum表示 ...

  6. html 涂改图片功能实现

    网页源码直接贴了: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> < ...

  7. Kmeans++算是DONet实现

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  8. 音乐播放(AVAudioPlayer)

  9. 黑马----JAVA比较器:Comparable和Comparator

    黑马程序员:Java培训.Android培训.iOS培训..Net培训 一.Comparable接口 1.public interface Comparable{ public int compare ...

  10. 【转】JavaScript 经常忽略的 7 个基础知识点

    原文转自:http://bbs.html5cn.org/thread-83442-1-1.html 1. 在 String.prototype.replace 方法中使用 /g 和 /i标志位 令很多 ...