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.26.0 has been released.
This release contains refinements, improvements, and bug fixes, with highlights listed below.
- Fix compression filter crash on empty payload. (#21315)
- Ensure awake pollset_work threads exist on Windows. (#19311)
- Disable client_idle_filter. (#20910)
- Remove gpr_get/set_allocation_functions. (#20462)
- Security audit response. (#20839)
- Automatically disable testing frameworks if gRPC_BUILD_TESTS=OFF. (#20976)
- Do not build channelz when gRPC_USE_PROTO_LITE. (#21011)
- Add options for all codegen plugins. (#20629)
- gRPC-C++ podspec follows gRPC versioning. (#20977)
- Issue 19208: Fix pollset_set_del_fd to cleanup all fd references. (#20452)
- De-duplicate .proto file processing. (#20537)
- cmake: Add VERSION and SOVERSION properties to libraries. (#20770)
- C# Fix Unobserved Task Exception problem for cancelled calls with unexhausted response stream. (#21202)
- Fix C# sending empty payloads with gzip compression. (#21266)
- C#: fix #20782. (#20859)
- Update GRPCUnaryResponseHandler with generics. (#21316)
- Release Python3.8 wheels for Windows. (#21271)
- Release Python3.8 wheel on macOS. (#21270)
- Fix issue with exception being out of scope in Python 3. (#20314)
- [AIO] Implement the shutdown process for AIO server and completion queue. (#20805)
- Attempt to drop support for Python 3.4. (#20789)
- AIO Unified call interface. (#20824)
- Make sure Core aware of gevent Cython objects. (#20891)
- [bazel] Add an ability to call an optional custom plugin for py_proto_library and py_grpc_library. (#20846)