gRPC is a modern, open-source, high-performance remote procedure call (RPC) framework that can run anywhere. It enables client and server applications to communicate transparently and makes it easier to build connected systems. Remote Procedure Calls (RPCs) provide a useful abstraction for building distributed applications and services. The libraries in this repository provide a concrete implementation of the gRPC protocol, layered over HTTP/2. These libraries enable communication between clients and servers using any combination of the supported languages.
By default, it uses Protocol Buffers as the Interface Definition Language (IDL) for describing both the service interface and the structure of the payload messages. It is possible to use other alternatives if desired.
Starting from an interface definition in a .proto file, gRPC provides Protocol Compiler plugins that generate Client- and Server-side APIs. gRPC users typically fall into these APIs on the client-side and implement the corresponding API on the server-side.
Synchronous vs. asynchronous
Synchronous RPC calls, that block until a response arrives from the server, are the closest approximation to the abstraction of a procedure call that RPC aspires to.
On the other hand, networks are inherently asynchronous and in many scenarios, it is desirable to have the ability to start RPCs without blocking the current thread.
The gRPC programming surface in most languages comes in both synchronous and asynchronous flavors.
grpc v1.34.0 has been released.
- Protect xds security code with the environment variable “GRPC_XDS_EXPERIMENTAL_SECURITY_SUPPORT”. (#24782)
- Add support for “unix-abstract:” URIs to support abstract unix domain sockets. (#24500)
- Increment Index when parsing not plumbed SAN fields. (#24601)
- Revert “Revert “Deprecate GRPC_ARG_HTTP2_MIN_SENT_PING_INTERVAL_WITHOUT_DATA_MS””. (#24518)
- xds: Set status code to INVALID_ARGUMENT when NACKing. (#24516)
- Include stddef.h in address_sorting.h. (#24514)
- xds: Add support for case_sensitive option in RouteMatch. (#24381)
- Removing TLS workaround for Android NDK r12b. (#24283)
- Fix –define=grpc_no_xds=true builds. (#24503)
- Experimental support and tests for CreateCustomInsecureChannelWithInterceptorsFromFd. (#24362)
- Fix C# native library loading in .NET 5 single-file apps (backport to v1.34.x). (#24853)
- Make RIDs for the native dependencies in Grpc.Core arch specific. (#24766)
- Improve PlatformApis check for detecting Unity. (#24714)
- Fix to not require libc-dev on .NET 5 or later. (#24485)
- C#: Make Grpc.Core nuget slimmer by moving mobile support to Grpc.Core.Xamarin package. (#24380)
- C#: Stop supporting 32bit runtime for linux and macos . (#24378)
- Modernize C# HelloworldXamarin example. (#24425)
- Support swift package manager for grpc-core and grpc-cpp. (#24571)
- Add transport information into grpc-objc user-agent. (#24253)
- Bump iOS and OSX version. (#24282)
- PHP: add support for PHP 8 in PECL extension. (#24621)
- PHP: deprecate PHP 5 support from PECL extension. (#24353)
- Incur setuptools as an dependency for grpcio_tools. (#24752)
- Stop the spamming log generated by ctrl-c for AsyncIO server. (#24718)
- [gRPC Easy] Make Well-Known Types Available to Runtime Protos. (#24478)
- Bump MACOSX_DEPLOYMENT_TARGET to 10.10 for Python. (#24480)
- Make Python 2 an optional dependency for Bazel build. (#24407)
- [Linux] [macOS] Support pre-compiled Python 3.9 wheels. (#24356)
- Bump MACOSX_DEPLOYMENT_TARGET to 10.10 for Ruby. (#24479)