1,关于grpc-go


golang 能够能够做grpc的服务端和client。

官网的文档:
http://www.grpc.io/docs/quickstart/go.html
https://github.com/grpc/grpc-go
和之前写的java的grpcclient调用同样。也须要使用protobuf的配置文件。
可是golang以下的类库很的简单。并且golang的性能也很强悍呢。
有些简单的业务逻辑真的能够使用golang进行开发。
性能强悍并且。消耗的资源也很小。

java感觉上已经很的臃肿了。
项目已经上传到github上面了。
https://github.com/freewebsys/grpc-go-demo

2,生成代码


定义proto文件:

syntax = "proto3";
package helloworld;// The greeting service definition.
service Greeter {// Sends a greetingrpc SayHello (HelloRequest) returns (HelloReply) {}
}// The request message containing the user's name.
message HelloRequest {string name = 1;
}// The response message containing the greetings
message HelloReply {string message = 1;
}

3,生成代码,服务端,client调用

cd src/helloworld
protoc -I ./ helloworld.proto –go_out=plugins=grpc:.
会生成一个go的helloworld.pb.go 文件。里面包含了grpc的远程调用和protobuf的序列化。

server.go

package mainimport ("log""net""golang.org/x/net/context""google.golang.org/grpc"pb "github.com/freewebsys/grpc-go-demo/src/helloworld""google.golang.org/grpc/reflection""fmt"
)const (port = ":50051"
)// server is used to implement helloworld.GreeterServer.
type server struct{}// SayHello implements helloworld.GreeterServer
func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {fmt.Println("######### get client request name :"+in.Name)return &pb.HelloReply{Message: "Hello " + in.Name}, nil
}func main() {lis, err := net.Listen("tcp", port)if err != nil {log.Fatalf("failed to listen: %v", err)}s := grpc.NewServer()pb.RegisterGreeterServer(s, &server{})// Register reflection service on gRPC server.reflection.Register(s)if err := s.Serve(lis); err != nil {log.Fatalf("failed to serve: %v", err)}
}

client.go

package mainimport ("log""os""golang.org/x/net/context""google.golang.org/grpc"pb "github.com/freewebsys/grpc-go-demo/src/helloworld"
)const (address     = "localhost:50051"defaultName = "world"
)func main() {// Set up a connection to the server.conn, err := grpc.Dial(address, grpc.WithInsecure())if err != nil {log.Fatalf("did not connect: %v", err)}defer conn.Close()c := pb.NewGreeterClient(conn)// Contact the server and print out its response.name := defaultNameif len(os.Args) > 1 {name = os.Args[1]}r, err := c.SayHello(context.Background(), &pb.HelloRequest{Name: name})if err != nil {log.Fatalf("could not greet: %v", err)}log.Printf("####### get server Greeting response: %s", r.Message)
}

4,执行服务端&client代码


go run server/main.go

go run clinet/main.go

同一时候,能够使用java的client和服务端 <<===>> go的服务端client
相互调用。

5,总结


本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/59483427 未经博主同意不得转载。
博主地址是:http://blog.csdn.net/freewebsys

grpc 服务的远程调用还是很的简单的。
可是这个仅仅是一个helloworld ,真正要在企业内部使用的时候还须要一个注冊中心。
管理全部的服务。

初步计划使用 consul 存储数据。

由于consul 上面集成了许多的好东西。还有个简单的可视化的界面。

比etcd功能多些。

可是性能上面差一点。只是也很强悍了。
企业内部使用的注冊中心。已经足够了。

grpc(3):使用 golang 开发 grpc 服务端和client相关推荐

  1. 聚播微信多开客服系统二次开发SDK服务端接口

    聚播微信多开客服系统二次开发SDK服务端接口 case HeartBeatReq: {// 客户端发送的心跳包heartBeatReqHandler.handleMsg(ctx, msgVo);bre ...

  2. C++后端开发程序员应该彻底搞懂的【libevent网络库】,libevent组件构成以及编程要领丨Linux服务器开发丨服务端编程

    90分钟搞懂libevent网络库 1. 服务端事件组成 2. libevent组件构成以及编程概要 3. memcached是如何使用libevent 视频讲解如下,点击观看: C++后端开发程序员 ...

  3. 聚播微信群控云控引擎二次开发SDK服务端对接接口

    聚播微信群控云控引擎二次开发SDK服务端对接接口 case HeartBeatReq: {// 客户端发送的心跳包heartBeatReqHandler.handleMsg(ctx, msgVo);b ...

  4. 17 SSR:使用 React.js 开发 Serverless 服务端渲染应用

    今天我想和你聊一聊怎么用 Serverless 开发一个服务端渲染(SSR)应用. 对前端工程师来说,Serverless 最大的应用场景之一就是开发服务端渲染(SSR)应用.因为传统的服务端渲染应用 ...

  5. C++ 开发SOAP服务端和SOAP客户端

    C++ 开发SOAP服务端和SOAP客户端 作者:flyfish  2012-5-12 目的:利用gSOAP自带的Calc例子 仿写一个 网络中使用计算器 客户端通过http发送xml格式的数据请求, ...

  6. 使用KBEngine开发UE4服务端——开发详解

    使用KBEngine开发UE4服务端--开发详解 1. 简述 开始正式进入开发,网络上关于开发和修改文件的文章较少,这里会记录自己开发过程中需要更改的地方和一些流程. 2. 前期的配置说明 根据前文配 ...

  7. WCF服务端调用client.

    wcf服务端 1,新建一个"windows窗口程序"名称为WCFServer2. 2.然后加入一个"WCF服务"名称为Service1. 详细步骤为:解决方式试 ...

  8. 【转】使用Apache CXF开发WebServices服务端

    原地址:http://cnjava.blog.51cto.com/1208887/335630 在前一篇的博客中,我使用Xfire1.x来开发了WebServies的服务端. 但是如果你访问Apach ...

  9. 使用Nuxt.js框架开发(SSR)服务端渲染项目

    (SSR)服务端渲染的优缺点 优点: 1.前端耗时少,首屏加载速度快.因为后端拼接完了html,浏览器只需要直接渲染出来. 2.有利于SEO.因为在后端有完整的html页面,所以爬虫更容易爬取获得信息 ...

最新文章

  1. .substr()在字符串每个字母前面加上一个1
  2. vue组件中的样式属性:scoped,解决在父组件中无法修改子组件样式问题
  3. 随机过程:高斯函数导数、梯度
  4. 多线程:当你提交任务时,线程队列已经满了,这时会发生什么?
  5. Kubernetes上的负载均衡详解
  6. 无法安装软件之解决其一 (windows installer服务篇)
  7. 我的布尔玛CSS框架之旅
  8. (56)FPGA条件选择有优先级(case)
  9. ArcGIS制图表达Representation实战篇3-控制点
  10. 金三银四面试季—20道精选JVM重点面试问题!
  11. Unity插件-HighlightingSystem(边缘光)
  12. python 邮件服务器_python SMTP邮件服务
  13. c语言中平方根函数(sqrt)
  14. MMQ 开源免费 同时支持分布式架构和数据持久化、规则引擎、ACL的MQTT broker。
  15. 001《以幽默的方式过一生》 读书笔记
  16. 【Enhanced Time-Frequency Representation and Mode Decomposition】翻译1
  17. 服务器如何选择固态硬盘,为什么绝大数服务器还使用机械硬盘,而不选固态硬盘呢?...
  18. 开源OceanBase如何与Prometheus与Grafana监控结合
  19. v4l2框架-开启视频流(stream on)
  20. 无法连接虚拟设备 sata0:1,因为主机上没有相对应的设备——解决方案

热门文章

  1. 独立的定义有多重等价表述方式
  2. 每日三道前端面试题--vue 第二弹
  3. 笔记本--摄像头驱动--找不到相机--浏览器打开相机失败--未检测到摄像头--剩下的标题我就不想了--太长了
  4. php输出因子,如何在PHP因子程序中返回值
  5. 沙洋有几个微服务群_QQ群控系统强力黑科技,助力你实现自动化获客
  6. rest api是什么_如何选择合适的API测试工具
  7. python按位处理二进制文件_对如何在python shell中对16位二进制数执行按位运算感到困惑...
  8. VUE 学习代码 监视和 模板语法回调函数
  9. java 编写 servlet 程序_Java技术分享:如何编写servlet程序
  10. python socket thread,python实现socket+threading处理多连接的方法