原理:
IDL(proto buffer) + RPC
netty:异步/事件驱动的 网络应用程序服务器框架(高性能)
Http2:流式、双向
protobuf:序列化(节省网络带宽)
IDL定义示例:
rpc SayHello(HelloRequest) returns (HelloResponse){
}
message HelloRequest {
string greeting = 1;
}
message HelloResponse {
string reply = 1;
}
使用:
Starting from a service definition in a .proto file, gRPC provides protocol buffer compiler plugins that generate client- and server-side code.
- .proto
-
protoc编译
静态:grpc-tools. grpc_tools_node_protoc
动态:protoLoader.loadSync - server
-
client
common
server
client
key code:
protoLoader.loadSync(proto_path: string): PackageDefinition
packageDefinition
grpc.loadPackageDefinition(packageDefinition: PackageDefinition): GrpcObject
GrpcObject
与Http对比:
Http:如果没有API文档就不知道细节,
GRPC:IDL就相当于API文档,可以同时
开发顺序:
Http:先服务端后客户端
GRPC:可以同时
与Thrift对比:
跨语言:都支持多语言
性能:GRPC远差于Thrift,因为用了Http2,各大server目前支持不完善
易用性:GRPC尚未完全提供连接池、服务自动发现、进程内负载均衡等高级特性,需要开发人员额外的封装;
优点:
多语言
Http2特性:如stream
缺点:
易用性:GRPC尚未完全提供连接池、服务自动发现、进程内负载均衡等高级特性,需要开发人员额外的封装
网友评论