Google 刚刚开源了grpc, 一个基于HTTP2 和 Protobuf 的高性能、开源、通用的RPC框架。Protobuf 自己虽然提供了RPC 的定义语法,可是一直以来,Google 只开源了Protobuf 序列化反序列化的代码,而没有开源RPC 的实现,因而存在着众多参差不齐的第三方RPC 实现,不过我在项目中采用WCF搭配Protobuf是一个很不错的RPC实现,Google这个框架是是基于HTTP2的,这是他有特点的地方,带来诸如双向流、流控、头部压缩、单TCP链接上的多复用请求等特性。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。html
从实现和特性看来,grpc 更多的是考虑移动场景状况下客户端和服务端的通讯,正如其自称的「general RPC framework that puts mobile and HTTP/2 first」。HTTP2 自己提供了链接多路复用、Body 和 Header 压缩等机制,grpc 基于此能够提供比较高效的实现。目前Firefox、Chrome、Safari、Opera、iOS版Safari、Android版Chrome、Windows 8上的IE 11都已经支持HTTP/2,Windows 10预览版自带的浏览器也支持它。Apache、Windows 10上的IIS和Nginx都已经实现了SPDY 3.1或4(这就是HTTP/2),剩下的工做就是网站管理员们去升级服务器软件了。c++
grpc 所使用的依赖都比较新,如protbuf 须要3.0 版本, c++ 使用了c++11, Java 实现中的netty 须要5.0 版本, HTTP2 也是刚刚定稿。现阶段官方支持C++、JAVA、Python等三种编程语言,并以c 共享库的方式来支持Node.js, Python, Ruby, Objective-C, PHP 和 C# 语言 (由此看来,c++, Java 和golang 在Google 有着一等公民的地位)。其中Java 语言的实现亦能够用于Android 客户端,Objective-C 的实现主要针对IOS 客户端。git
重点看了一下C# 的实现(https://github.com/grpc/grpc/tree/master/src/csharp ),目前代码只能在Mono下运行,主要是windows下的GRPC C core库的P/Invoke包装尚未完成,这里也能够看出Google的主要开发环境是Linux,对Mono的支持还不错,这点对一样是互联网公司国内同行颇有借鉴意义。github
http://www.cnblogs.com/shanyou/p/grpc.htmlgolang