Keine Beschreibung

Dan Zhang 3742b724c9 change to int type vor 7 Jahren
.github e1a00b3457 Add OWNERS to protect scenario_result_schema.json vor 7 Jahren
.vscode d1f3082ff6 Adding shim for debugging node tests using vscode. vor 8 Jahren
bazel 54a70409c0 Move more special cases in bazel build to the .bzl files vor 7 Jahren
cmake f38b1526f8 simplify top level CMakeLists.txt vor 7 Jahren
doc 32f9e98581 Remove garbage file doc/md vor 7 Jahren
etc 69c923ffb7 Updating roots from Mozilla. vor 8 Jahren
examples 87cd994b04 Upgrade yapf to 0.20.0 vor 7 Jahren
include 32d077e7e1 Merge pull request #13922 from y-zeng/openssl_1_1_0 vor 7 Jahren
src 3742b724c9 change to int type vor 7 Jahren
summerofcode d13a780be0 Add project overview for gsoc submission vor 9 Jahren
templates fb2eb5279e Merge pull request #13830 from jtattermusch/cmake_cleanup vor 7 Jahren
test 3742b724c9 change to int type vor 7 Jahren
third_party 8065a5e73c Use rake-compiler-dock's Dockerfile as a base in grpc's fork of it vor 7 Jahren
tools 0b62b2f6ed reintroduce check_sources_and_headers optimization vor 7 Jahren
vsprojects 4dc3c0bdd3 Merge branch 'master' of github.com:grpc/grpc into filters_prio vor 8 Jahren
.clang-format baa14a975e Update clang-format to 5.0 vor 8 Jahren
.clang_complete 4ac2b8e585 Enable clang-tidy as a sanity check, fix up all known failures vor 8 Jahren
.editorconfig ae66d78b8e Adding an editorconfig configuration file. vor 10 Jahren
.gitignore 53d5503fac Pass a pollset_set to some client handshakers. vor 7 Jahren
.gitmodules 99e0b4bfec Fetch boringssl-with-bazel submodule from GitHub vor 7 Jahren
.istanbul.yml 2af89e49cb Moved gRPC node package root to repo root, made it depend on grpc.gyp vor 10 Jahren
.pylintrc 2010985ab2 gRPC Python test infrastructure vor 8 Jahren
.rspec d7e1a10628 Bundled C core with Ruby library vor 9 Jahren
.travis.yml 10726f0421 Have Travis build the Sample app with frameworks too vor 9 Jahren
.yardopts 33c728e1ed Adding a .yardopts file at the root so rubydocs isn't getting lost. vor 9 Jahren
AUTHORS 312ea4a187 change LICENSE, add AUTHORS vor 8 Jahren
BUILD 51d79c83a6 Bump BUILD version to 1.9.x-dev on master vor 7 Jahren
CMakeLists.txt 6535cfd140 Set error status correctly on server side vor 7 Jahren
CODE-OF-CONDUCT.md c055a79262 Fix code of conduct vor 8 Jahren
CONTRIBUTING.md a9209ae39c Updated CLA link to reflect migration to Linux Foundation. vor 7 Jahren
Gemfile d7e1a10628 Bundled C core with Ruby library vor 9 Jahren
INSTALL.md cf6c2ed5c4 address comments vor 7 Jahren
LICENSE fbb61ed25d fix license file vor 8 Jahren
MANIFEST.md ac586ba21e Remove tox vor 9 Jahren
Makefile 32d077e7e1 Merge pull request #13922 from y-zeng/openssl_1_1_0 vor 7 Jahren
NOTICE.txt 312ea4a187 change LICENSE, add AUTHORS vor 8 Jahren
OWNERS aa49cbfd9d Add policy to comment vor 8 Jahren
PYTHON-MANIFEST.in 1f24b2ad8a Changes vor 8 Jahren
README.md 611ee4ac68 Update README.md Copyright Notice vor 7 Jahren
Rakefile 8065a5e73c Use rake-compiler-dock's Dockerfile as a base in grpc's fork of it vor 7 Jahren
WORKSPACE 174e02ae3e Packs contents of WORKSPACE into a bzl function, so that it can be resued by other projects, and simplifies cares build. vor 7 Jahren
build.yaml c6ae9b562b Silence openssl 1.1.0 warnings vor 7 Jahren
build_config.rb 58c33ba19b Decouple alarm construction from setting to avoid races in MT code vor 8 Jahren
composer.json bb3d95b643 Use https://grpc.io consistently as the canonical URL vor 8 Jahren
config.m4 195cf1ebfd Move histogram to test/core/util vor 7 Jahren
config.w32 195cf1ebfd Move histogram to test/core/util vor 7 Jahren
gRPC-Core.podspec 6535cfd140 Set error status correctly on server side vor 7 Jahren
gRPC-ProtoRPC.podspec 361f8108e4 Merge branch 'master' of https://github.com/grpc/grpc into upmerge-from-v1.7 vor 7 Jahren
gRPC-RxLibrary.podspec 361f8108e4 Merge branch 'master' of https://github.com/grpc/grpc into upmerge-from-v1.7 vor 7 Jahren
gRPC.podspec 361f8108e4 Merge branch 'master' of https://github.com/grpc/grpc into upmerge-from-v1.7 vor 7 Jahren
grpc.bzl 4d5c3102a1 fix remaining license notices vor 8 Jahren
grpc.def 195cf1ebfd Move histogram to test/core/util vor 7 Jahren
grpc.gemspec 195cf1ebfd Move histogram to test/core/util vor 7 Jahren
grpc.gyp 32d077e7e1 Merge pull request #13922 from y-zeng/openssl_1_1_0 vor 7 Jahren
package.xml 195cf1ebfd Move histogram to test/core/util vor 7 Jahren
requirements.txt 0df9c8acdc Update Python dependency to protobuf v3.5.0.post1 vor 8 Jahren
setup.cfg 06dea573da Enable running Python formatting vor 8 Jahren
setup.py d4a3bb817d Allow compiling grpc without use of pthread_atfork vor 7 Jahren

README.md

Build Status

gRPC - An RPC library and framework

Copyright 2015 The gRPC Authors

Documentation

You can find more detailed documentation and examples in the doc and examples directories respectively.

Installation & Testing

See INSTALL for installation instructions for various platforms.

See tools/run_tests for more guidance on how to run various test suites (e.g. unit tests, interop tests, benchmarks)

See Performance dashboard for the performance numbers for the latest released version.

Repository Structure & Status

This repository contains source code for gRPC libraries for multiple languages written on top of shared C core library src/core.

Libraries in different languages may be in different states of development. We are seeking contributions for all of these libraries.

Language Source
Shared C [core library] src/core
C++ src/cpp
Ruby src/ruby
Python src/python
PHP src/php
C# src/csharp
Objective-C src/objective-c

Java source code is in the grpc-java repository. Go source code is in the grpc-go repository. NodeJS source code is in the grpc-node repository.

See MANIFEST.md for a listing of top-level items in the repository.

Overview

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.

Interface

Developers using gRPC typically start with the description of an RPC service (a collection of methods), and generate client and server side interfaces which they use on the client-side and implement on the server side.

By default, gRPC 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.

Surface API

Starting from an interface definition in a .proto file, gRPC provides Protocol Compiler plugins that generate Client- and Server-side APIs. gRPC users typically call 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.

Streaming

gRPC supports streaming semantics, where either the client or the server (or both) send a stream of messages on a single RPC call. The most general case is Bidirectional Streaming where a single gRPC call establishes a stream where both the client and the server can send a stream of messages to each other. The streamed messages are delivered in the order they were sent.

Protocol

The gRPC protocol specifies the abstract requirements for communication between clients and servers. A concrete embedding over HTTP/2 completes the picture by fleshing out the details of each of the required operations.

Abstract gRPC protocol

A gRPC RPC comprises of a bidirectional stream of messages, initiated by the client. In the client-to-server direction, this stream begins with a mandatory Call Header, followed by optional Initial-Metadata, followed by zero or more Payload Messages. The server-to-client direction contains an optional Initial-Metadata, followed by zero or more Payload Messages terminated with a mandatory Status and optional Status-Metadata (a.k.a.,Trailing-Metadata).

Implementation over HTTP/2

The abstract protocol defined above is implemented over HTTP/2. gRPC bidirectional streams are mapped to HTTP/2 streams. The contents of Call Header and Initial Metadata are sent as HTTP/2 headers and subject to HPACK compression. Payload Messages are serialized into a byte stream of length prefixed gRPC frames which are then fragmented into HTTP/2 frames at the sender and reassembled at the receiver. Status and Trailing-Metadata are sent as HTTP/2 trailing headers (a.k.a., trailers).

Flow Control

gRPC inherits the flow control mechanisms in HTTP/2 and uses them to enable fine-grained control of the amount of memory used for buffering in-flight messages.