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实战的更多相关文章

  1. java版gRPC实战之一:用proto生成代码

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  2. java版gRPC实战之二:服务发布和调用

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  3. java版gRPC实战之三:服务端流

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  4. java版gRPC实战之四:客户端流

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  5. java版gRPC实战之五:双向流

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  6. java版gRPC实战之六:客户端动态获取服务端地址

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  7. java版gRPC实战之七:基于eureka的注册发现

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  8. .Net Core gRPC 实战(二)

    概述 gRPC 客户端必须使用与服务相同的连接级别安全性.  如调用服务时通道和服务的连接级别安全性不一致,gRPC 客户端就会抛出错误. gRPC 配置使用HTTP gRPC 客户端传输层安全性 ( ...

  9. .Net Core gRPC 实战(一)

    gRPC 是一种与语言无关的高性能远程过程调用 (RPC) 框架. gRPC 的主要优点是: 现代高性能轻量级 RPC 框架. 协定优先 API 开发,默认使用协议缓冲区,允许与语言无关的实现. 可用 ...

随机推荐

  1. 使用Template格式化Python字符串

    对Python字符串,除了比较老旧的%,以及用来替换掉%的format,及在python 3.6中加入的f这三种格式化方法以外,还有可以使用Template对象来进行格式化. from string ...

  2. 纯CSS二级纵向菜单

    纯CSS二级纵向菜单 <body> <div class="divda"> <div class="nav"> <ul ...

  3. Mongodb高级查询【二】

    上一篇文章,写了mongodb常规操作,继续写入,本章主要讲高级查询,文本,聚集,大数据查询. Mongodb的查询语法是很多的,是NOSQL队伍中比较丰富的一个.当然有很多查询跟关系型查询无法相比. ...

  4. 【漏洞分析】dedecms有前提前台任意用户密码修改

     0x00 前言 早上浏览sec-news,发现锦行信息安全发布了一篇文章<[漏洞分析] 织梦前台任意用户密码修改>,看完之后就想着自己复现一下. 该漏洞的精髓是php的弱类型比较,'0. ...

  5. socke编程

    一 客户端和服务端架构 1 硬件c/s架构 2软甲c/s架构 3 socket与c/s的关系:socket是为了开发c/s的 二 osi七层 三张图片http://www.cnblogs.com/wa ...

  6. webpack基础打包安装分享

    一.创建webpack-first文件夹作为站点,创建app文件夹存放js原始模块(main.js 和 Greeter.js) 创建 public文件夹存放index.html和打包后的bundle. ...

  7. 使用三种方法求解前N个正整数的排列

    本篇博文给大家介绍前N个正整数的排列求解的三种方式.第一种是暴力求解法:第二种则另外声明了一个长度为N的数组,并且将已经排列过的数字保存其中:第三种方式则采用了另外一种思路,即首先获取N个整数的升序排 ...

  8. 使用socket搭建一个网络聊天室

    #服务器端import socket import threading #创建一个TCP端 sock = socket.socket(socket.AF_INET, socket.SOCK_STREA ...

  9. 深入理解 react-router 路由系统

    作者:范洪春链接:https://zhuanlan.zhihu.com/p/20381597来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 在 web 应用开发中,路由 ...

  10. hdu_1026(最短路)

    题意:最快出去的路径 题解:一看就是一个很简单的最短路,用优先队列写个spfa就过了,但是没想到水了个(n*n)^2的算法也过了...愿意很简单,因为是个稀疏图 敲完以后一百度发现就是个简单的bfs+ ...