转自:java
http://www.dongliu.net/post/622450c++
Google 刚刚开源了grpc, 一个基于HTTP2 和 Protobuf 的RPC 实现。git
Protobuf 自己虽然提供了RPC 的定义语法,可是一直以来,Google 只开源了Protobuf 序列化反序列化的代码,而没有开源RPC 的实现,因而存在着众多参差不齐的第三方RPC 实现。github
从实现和特性看来,grpc 更多的是考虑移动场景状况下客户端和服务端的通讯,正如其自称的「general RPC framework that puts mobile and HTTP/2 first」。HTTP2 自己提供了链接多路复用、Body 和 Header 压缩等机制,grpc 基于此能够提供比较高效的实现。golang
grpc 所使用的依赖都比较新,如protbuf 须要3.0 版本, c++ 使用了c++11, Java 实现中的netty 须要5.0 版本, HTTP2 也是刚刚定稿。这些依赖中不少都仍是没有正式release ,因此目前来看grpc 还不是一个可稳定使用的状态。post
grpc 提供了c 、Java、golang 的原生实现,并以c 共享库的方式来支持Node.js, Python, Ruby, Objective-C, PHP 和 C# 语言 (由此看来,c++, Java 和golang 在Google 有着一等公民的地位)。其中Java 语言的实现亦能够用于Android 客户端,Objective-C 的实现主要针对IOS 客户端。.net