预备: 安装依赖最新版docker-compose
$ curl -L https://github.com/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
$ chmod +x /usr/local/bin/docker-compose
- 克隆grpc-web仓库
$ git clone https://github.com/grpc/grpc-web.git
$ cd grpc-web
- 拉取体验docker-compose镜像,并启动服务
$ docker-compose pull prereqs common node-server envoy commonjs-client
$ docker-compose up -d node-server envoy commonjs-client
docker-compose ps
可以看到启动了如下服务docker-compose-ps
node-server: 这是一个node实现标准的gRPC服务,监听9090端口;
envoy: Envoy代理,监听8080端口,用于转发浏览器gRPC-Web的请求到9090端口,可以通过一个配置文件envoy.yaml完成.
commonjs-client: 它使用protoc
的protoc-gen-grpc-web
插件生成用户票据类,使用webpack构建项目,并起了一个简单服务在8081端口来支持静态文件echotest.html and dist/main.js文件访问,只要用户在web页面上交互,他就会发送一个gRPC-Web
请求到Envoy
代理的8080端口
服务简单,向服务器发送一个字符A, 然后前端base64
后得到字符B, 记着把B发送给服务器,服务器拿到B后生成B base64后的C,最后返回B=C
给前端,前端再两次base64反解解析出A
如上来看gRPC并没有什么特别之处,或者从另一方面说gRPC提供的json模式和ajax在功能上是一致的,
- 体验完后
docker-compose down
关闭服务
不需要的话记得清除以免占用空间
$ docker-compose down --rmi all
Protobuf
是protocol buffers
的缩写,是一个应用在通信协议、数据存储等,跨语言且跨平台的序列化数据结构的机制,类比想象一下XML,但是它更小、更快、更简单。你只需要一次定义你想要的数据结构,你就能使用专门为你给定的语言生成的源代码轻松的从各种数据流中读写你自定义的结构的数据。厉害的是你可以在不中断已部署的项目(即,你按旧格式编译好的程序)的情况下更新你定义的数据结构,这个机制在Google尤为实用,通常一个新的服务推出通常一开始就需要和老服务通信。