gRPC实战
gRPC是Google开源的一款非常棒的系统间通信工具,完美的communication抽象,构建在protobuf之上的RPC.
下面我们聊聊它的应用场景,grpc为分布式系统而生,可以是系统间通信,也可以是系统内部进程间通信。下面以python为例。
笔者系统里装有python2.7和python3,下面就用python2.7举例:
sudo python2.7 install grpcio-tools
sudo pip2.7 install grpcio
1. create calculator.proto
syntax = "proto3";
message Number {
float value = 1;
}
service Calculator {
rpc SquareRoot(Number) returns (Number) {}
}
2. execute following command
/usr/bin/python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. calculator.proto
3. create calculator.py
import math def square_root(x):
y = math.sqrt(x)
return y
4. create server.py
#!/usr/bin/python import grpc
from concurrent import futures
import time import calculator_pb2
import calculator_pb2_grpc import calculator class CalculatorService(calculator_pb2_grpc.CalculatorService):
def SquareRoot(self, request, response):
response = calculator_pb2.Number()
response.value = calculator.square_root(request.value)
return response server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) calculator_pb2_grpc.add_CalculatorService_to_server(CalculatorService(), server) print "Starting server. Listening on port 5566"
server.add_insecure_port('[::]:5566')
server.start() try:
while True:
time.sleep(80000)
except KeyboardInterrupt:
server.stop(0)
5. create client.py
#!/usr/bin/python import grpc import calculator_pb2
import calculator_pb2_grpc channel = grpc.insecure_channel('localhost:5566') stub = calculator_pb2_grpc.CalculatorStub(channel) number = calculator_pb2.Number(value=64) response = stub.SquareRoot(number) print response.value
Run:
./server.py
Starting server. Listening on port 5566
./client.py
8.0
grpc 同时还支持grpc gateway, 提供一个gateway作为reverse proxy, 目前好像只支持go,相当于提供一个HTTP restful endpoint, 然后能够返回json,这样HTTP client也可以使用grpc + gateway的解决方案。总之google这套开源框架还是非常令人满意的。
另外想说说它同时支持thread pool和异步两种模式,满足不同场景下的并发需求,本例子里面用的是同步多线程。
gRPC实战的更多相关文章
- java版gRPC实战之一:用proto生成代码
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- java版gRPC实战之二:服务发布和调用
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- java版gRPC实战之三:服务端流
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- java版gRPC实战之四:客户端流
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- java版gRPC实战之五:双向流
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- java版gRPC实战之六:客户端动态获取服务端地址
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- java版gRPC实战之七:基于eureka的注册发现
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- .Net Core gRPC 实战(二)
概述 gRPC 客户端必须使用与服务相同的连接级别安全性. 如调用服务时通道和服务的连接级别安全性不一致,gRPC 客户端就会抛出错误. gRPC 配置使用HTTP gRPC 客户端传输层安全性 ( ...
- .Net Core gRPC 实战(一)
gRPC 是一种与语言无关的高性能远程过程调用 (RPC) 框架. gRPC 的主要优点是: 现代高性能轻量级 RPC 框架. 协定优先 API 开发,默认使用协议缓冲区,允许与语言无关的实现. 可用 ...
随机推荐
- numpy库常用基本操作
NumPy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推.在NumPy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴的数量.比如说,二维数组相当于是一个一维数 ...
- Java 控制台输入数字 输出乘法表(代码练习)
最近,回忆了一些刚学习Java时经常练习的一些小练习题.感觉还是蛮有趣的,在回顾时想起好多学习时的经历和坎坷,一道小小的练习题要研究半天,珍重过往,直面未来.下面贡献代码,Java 控制台输入数字 输 ...
- [转]如何用adb控制MTKLogger
[DESCRIPTION] 如何通过adb command去控制MTKLogger 开关,设定log路径等等. [KEYWORD] MTKLogger adb控制 路径 大小 [SOLUTION] 1 ...
- Jerry的通过CDS view + Smart Template 开发Fiori应用的blog合集
S4/HANA里有一个新的UI框架叫做Smart template, 配合ABAP后台的CDS view技术,能够让developer以Metadata driven的方式来开发Fiori应用, 这种 ...
- replace into 浅析之一
一 介绍 在笔者支持业务过程中,经常遇到开发咨询replace into 的使用场景以及注意事项,这里做个总结.从功能原理,性能和注意事项上做个说明.二 原理2.1 当表中存在主键但是不存在唯一建的 ...
- 多个JDK使用批处理命令切换JDK版本
本篇博客参考的链接 http://blog.csdn.net/hu199055/article/details/70145389 https://www.cnblogs.com/xdp-gacl/p/ ...
- Redis随笔(二)redis desktop manager 安装并且连接redis服务器
1.首先在win10下安装redis desktop manager 2.查看虚拟机防火墙状态,启动状态,则关闭掉 查看防火墙状态: systemctl status firewalld.servic ...
- [PHP] PHP源码中的条件编译定义
根据不同情况编译不同代码.产生不同目标文件的机制,称为条件编译有这些预处理命令:#if.#elif.#else #endif :#ifdef #else #endif PHP源码: #ifdef SE ...
- Ubuntu下配置ShadowS + Chrome
// 这是一篇导入进来的旧博客,可能有时效性问题. 题目和全文中的ShadowS指代以ShadowS开头名字的某工具,以预防文章被和谐.本机Ubuntu 14.04 LTS.在apt-get upda ...
- MongoDB入门学习笔记之简介与安装配置
一.MongoDB简介 1.文档数据库 MongoDB是一款开源的文档型非关系数据库,具有高性能.高可靠性和自动扩展等特点.MongoDB中的每一条记录是一个文档,其数据存储结构为键/值对,类似JSO ...