The C based gRPC (C++, Python, Ruby, Objective-C, PHP, C#)

Related tags

Frameworks grpc
Overview

gRPC - An RPC library and framework

gRPC is a modern, open source, high-performance remote procedure call (RPC) framework that can run anywhere. gRPC enables client and server applications to communicate transparently, and simplifies the building of connected systems.

Homepage: grpc.io
Mailing List: [email protected]

Join the chat at https://gitter.im/grpc/grpc

To start using gRPC

To maximize usability, gRPC supports the standard method for adding dependencies to a user's chosen language (if there is one). In most languages, the gRPC runtime comes as a package available in a user's language package manager.

For instructions on how to use the language-specific gRPC runtime for a project, please refer to these documents

  • C++: follow the instructions under the src/cpp directory
  • C#: NuGet package Grpc
  • Dart: pub package grpc
  • Go: go get google.golang.org/grpc
  • Java: Use JARs from Maven Central Repository
  • Kotlin: Use JARs from Maven Central Repository
  • Node: npm install grpc
  • Objective-C: Add gRPC-ProtoRPC dependency to podspec
  • PHP: pecl install grpc
  • Python: pip install grpcio
  • Ruby: gem install grpc
  • WebJS: follow the grpc-web instructions

Per-language quickstart guides and tutorials can be found in the documentation section on the grpc.io website. Code examples are available in the examples directory.

Precompiled bleeding-edge package builds of gRPC master branch's HEAD are uploaded daily to packages.grpc.io.

To start developing gRPC

Contributions are welcome!

Please read How to contribute which will guide you through the entire workflow of how to build the source code, how to run the tests, and how to contribute changes to the gRPC codebase. The "How to contribute" document also contains info on how the contribution process works and contains best practices for creating contributions.

Troubleshooting

Sometimes things go wrong. Please check out the Troubleshooting guide if you are experiencing issues with gRPC.

Performance

See the Performance dashboard for performance numbers of master branch daily builds.

Concepts

See gRPC Concepts

About This Repository

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

Libraries in different languages may be in various 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# (core library based) src/csharp
Objective-C src/objective-c
Language Source repo
Java grpc-java
Kotlin grpc-kotlin
Go grpc-go
NodeJS grpc-node
WebJS grpc-web
Dart grpc-dart
.NET (pure C# impl.) grpc-dotnet
Comments
  • LB policies request re-resolution without shutting down

    LB policies request re-resolution without shutting down

    Fixes #12731.

    I changed the code by intuition and I am still uncertain about lots of logic here. This initial commit can be compiled but increases the flakiness of at least grpclb_end2end test. And there is some asan issue I am looking at.


    This change is Reviewable

    kind/enhancement cla: yes area/client channel 
    opened by AspirinSJL 189
  • grpclb re-resolution

    grpclb re-resolution

    Currently, grpclb will hand off the re-resolution decision to its embedded RR policy. This PR lets grpclb to be in charge of its re-resolution. The connectivity of the balancers will also be taken into consideration so that grpclb will re-resolve only when both balancers and backends have been unreachable for some timeout.


    This change is Reviewable

    kind/enhancement area/client channel 
    opened by AspirinSJL 160
  • Retry support

    Retry support

    ~~This is VERY preliminary code. It builds, and I don't think it breaks any existing functionality, but that's about all I can say for it at this point. There are "FIXME" comments all over the place that need to be addressed before this is done, and there may yet be some issues that I have not yet identified.~~

    ~~That having been said, I am sending it out at this point just to get a sanity check as to whether or not this approach is even moderately reasonable. Please look at the high-level structure and let me know if it seems reasonable. Also, please look at my use of atomics (and some of the FIXME comments about things that aren't currently atomics but may need to be) and let me know if it looks sane.~~

    ~~Also, note that I came up with what I think is a better alternative to the tee_byte_stream implementation in #10448. It will need some additional work later to support hedging, but I think the current approach is fine for retries. If it looks good to you, I can probably revert that other PR.~~

    ~~I would welcome any and all suggestions you may have on this. Thanks!~~

    This code is now ready for review!

    I would appreciate review from the following folks:

    • @ctiller: This code is really complex, and I am unwilling to trust it without careful review from you.
    • @dgquintas: Please review from the perspective of your general knowledge of the client channel code.
    • @ncteisen: Please review for compliance with the retry design.

    Some things to note:

    • This is a massive PR, so please let me know what I can do to make it easier to review. There is a large block comment in client_channel.cc describing the overall approach, but I'm sure it's not enough to understand everything. I would be happy to meet in person and do a code walk-through with some or all of you, or just answer any questions you may have.
    • This includes all configurable retry functionality except for the stats, which I will work on in a separate PR. (That will require working with the Census folks to figure out the right way to expose these stats.)
    • This does not include transparent retry support. That work depends on #11934 and will be added in a separate PR.
    • This does not include hedging support. I've kept that use-case in mind while writing this code, but more design discussions will need to occur to figure out how to implement it without impacting performance.
    • I have not yet verified that all tests pass, so there will no doubt be some fixes needed before this can be merged.
    • I will be interested to see what the performance impact of this is. It should hopefully be not very much, since all of the synchronization overhead is taken care of by the call combiner code, which was already merged. There is some additional memory allocation needed for this, but that's mostly done on the arena, so it should hopefully not have a big impact. (And the additional memory allocations can be avoided by disabling retries via a channel arg.)

    Please let me know if you have any questions. Thanks!


    This change is Reviewable

    cla: yes 
    opened by markdroth 154
  • Remove memset(0) from arena allocate memory.

    Remove memset(0) from arena allocate memory.

    Callers should properly initialize the memory.

    Note that to avoid performance regressions we need some reordering in the initialization of grpc_call.

    This behavior can be overridden using GRPC_ARENA_INIT_STRATEGY environment variable.

    I had two more changes in the following files which I will skip in the PR because they are purely performance changes for cache coherency. I will upload that as a separate patch once this PR is merged: src/core/lib/channel/channel_stack.cc src/core/lib/surface/call.cc


    This change is Reviewable

    lang/core release notes: yes 
    opened by soheilhy 150
  • Channel Tracing Implementation; Part 1

    Channel Tracing Implementation; Part 1

    Implements the basic channel tracing architecture.

    Adds channel_tracer and object_registry files. The tracers are held by channels and subchannels and only log channel creation for now. In a subsequent PR I will begin plumbing the tracing objects around and logging all of the interesting things happening

    Picks up work from #10259. That PR was too stale to do a merge or rebase, but I want to maintain history


    This change is Reviewable

    kind/enhancement area/core 
    opened by ncteisen 136
  • Add address sorting submodule for use in c-ares wrapper

    Add address sorting submodule for use in c-ares wrapper

    This adds code to sort IP addresses resolved by grpc/c-ares wrapper per RFC 6724. This used Android's getaddrinfo as a guide (the differences between this and Android's implementation are mostly cosmetic and based around hooking the address-sorting code into the grpc code base). So, the code is added as a custom submodule which is under Android's license.

    I'd like to have more end-to-end tests and cross-platform tests for this, (e.g. run the resolver_component_tests on IPv4-only machines, IPv6-only machines, machines with modified routing tables, Windows, etc.,and verify sorting results in those scenarios), but it looks like that involves a lot of setup, and so this tests by mocking libc functions.


    This change is Reviewable

    area/core cla: yes 
    opened by apolcyn 136
  • Bazel multipool config update, removed sentinel file

    Bazel multipool config update, removed sentinel file

    Added multipool config for large instances and standard instances, replacing the sentinel file for large instances. Also updated the RBE container to the image containing bazel 0.16.1

    area/tools release notes: no 
    opened by billfeng327 127
  • Integrate Grpc.Tools into msbuild system (C# only)

    Integrate Grpc.Tools into msbuild system (C# only)

    When Grpc.Tools is added to a C# project, the project recognizes .proto files. These .proto are compiled into .cs files placed in the object directory (under obj/...), and are not shown in Visual Studio, but are available to Intellisense nevertheless.

    The scripts support both "classic" projects and the new dotnet style projects. In line with the latter ones (when .cs files are just dropped into the directory are picked up and compiled), .proto files are handled the same way, so just placing a .proto file into the folder is enough to compile it, and compile its protoc outputs into the project target assembly.

    The "classic" project requires adding .proto files by one, and they are assigned a correct build action automatically. To manually add proto files to msbuild script, use 'ProtoBuf' item type.

    For native code C++ projects, there is no added support beyond just dropping the compiler as before. For all other project types, an error message is generated on an attempted build. More C++ support is on the way.

    Dependency change: the package now adds a dependency on Grpc.Tools of a matching version for managed projects only. This is naturally skipped for native C++, as the managed runtime is not required.

    Also packaged are proto includes for well-known types.


    Validated and confirmed working:

    • Windows (VS, classic C#, dotnet C#, C++)
    • Linux/Mono (both classic C# and dotnet C#)
    • Linux/dotnet (dotnet C# project only)

    There are quite a few questions I wanted to discuss. If anyone could help me with proper decicions, I would appreciate it.

    1. The captialization of generated .cs files. When I compile fooBar.proto, the resulting .cs file is called FooBar.proto. Is there a way around that? This does not seem to make sense in the build like this, when the .cs files are treated at best as temporary. I can certainly script around the issue in msbuild scripts, but why have it in the first place?

    2. If x.proto does not contain any RPC services. the corresponding xGrpc.cs is not generated (FWIW, the cpp plugin does not do that). This is not good for the build. While it is certainly possible to see if the file is there after compilation, it is impossible to learn if it was actually produced by it. In other words, if I take a service definition out of x.proto after having previously compiled it, I end up with a stale xGrpc.cs that is added to compilation. Of course, it is possible to write some msbuild incantations about this issue as well, but it would be much cleaner just to create a nearly empty xGrpc.cs stub even if no services are defined. So options I am asking about here are

    • a) Leave it as is and script some very ugly transformations around it.
    • b) Add a plugin option to do always generate the stub.
    • c) In fact, forget the option and just always generate the stub.
    1. I want to package cpp plugins also, and support to integrate gRPC into the build process. (I already have it packaged internally). This will cover the build process in Visual Studio. Should we do that?

    2. I am adding a bunch of files to the root of src/chsarp that only go into the nuget package. Is it better to place them into a subdirectory? Is Grpc.Tools subdirectory good?


    /cc @jskeet @hcoona
    Closes #4805
    /* #13098 */

    lang/C# cla: yes release notes: yes 
    opened by kkm000 126
  • C++ API review: reduce core/implementation leakage

    C++ API review: reduce core/implementation leakage

    If you liked internalization, you'll love C++ API review. The purpose of this PR is to clean up the use of breakable core structs from C++ public API. This has previously been done for the features that interfaced with code generation, but this now needs to be more pervasive. The basic principle is that core surface APIs and C++ implementation details should not leak through to C++ public API.

    The implementation strategy is

    1. when possible, privatize features that should have never been exposed
    2. deprecate pieces if they can be easily and meaningfully substituted with a purely C++ API
    3. co-opt items for which there is no other option, but try to give an alternative and more idiomatically C++ version for those when possible

    This supercedes #14106 and will be matched to a gRFC soon.


    This change is Reviewable

    area/core lang/c++ area/api disposition/stale 
    opened by vjpai 123
  • Channelz Python wrapper implementation

    Channelz Python wrapper implementation

    See Issue https://github.com/grpc/grpc/issues/17264

    • Expose the C-Core API in Cython layer
    • Handle the object translation
    • Create a separate package for Channelz specifically
    • Adding utilities for the new package
    kind/enhancement lang/Python release notes: yes 
    opened by lidizheng 109
  • Rich status transport implementation

    Rich status transport implementation

    Background

    gRPC spec defined two trailing data to indicate the status of a RPC call Status and Status-Message (Spec). But status code and a text message themselves are insufficient to express more complicate situation like the RPC call failed because of quota check of certain policy, or the stack trace from the crashed server, or obtain retry delay from the server (see error details).

    Objective

    So, gRPC needs a mechanism to transport those complex status. It is implemented in C++, Java, Golang, and now Python.

    Design

    It is quite straight forward, we provide two API:

    • A server API to pack the rich status proto.
    • A client API to unpack the rich status proto.

    The transportation is done by setting/getting a trailing metadata entry named grpc-status-details-bin. Rich status message is encoded by ProtoBuf and transmit as binary.

    Implementation

    This PR

    Related Issue

    Addresses: https://github.com/grpc/grpc/issues/16366

    kind/enhancement lang/Python release notes: yes 
    opened by lidizheng 106
  • Cannot update xds config when Using proxyless mode in istio .

    Cannot update xds config when Using proxyless mode in istio .

    What version of gRPC and what language are you using?

    1.51.0,master

    What operating system (Linux, Windows,...) and version?

    Linux

    What runtime / compiler are you using (e.g. python version or version of gcc)

    C++ gcc11

    What did you do?

    use grpc proxyless in istio,but update routeconfig failed

    What did you expect to see?

    update routeconfig ok

    What did you see instead?

    1. After the program runs, there is the following error log and grpcdebug info.
    [/data/grpc/src/core/ext/xds/xds_route_config.cc:1126][xds_client 0x448a9860] invalid RouteConfiguration outbound|50051||dev-nick.hlddz.svc.cluster.local: INVALID_ARGUMENT: errors validating RouteConfiguration resource: [field:virtual_hosts[2].routes error:no valid routes in VirtualHost; field:virtual_hosts[3].routes error:no valid routes in VirtualHost]
    
    Name                                                   Status           Version                     Type                                                           LastUpdated
    dev-meshgate:50051                                     ACKED            2023-01-05T08:07:45Z/1425   type.googleapis.com/envoy.config.listener.v3.Listener          12 seconds ago   
    dev-nick:50051                                         ACKED            2023-01-05T07:40:47Z/1423   type.googleapis.com/envoy.config.listener.v3.Listener          22 minutes ago   
    monitor:50051                                          DOES_NOT_EXIST                               type.googleapis.com/envoy.config.listener.v3.Listener                           
    outbound|50051||dev-meshgate.hlddz.svc.cluster.local   NACKED                                       type.googleapis.com/envoy.config.route.v3.RouteConfiguration                    
    outbound|50051||dev-nick.hlddz.svc.cluster.local       NACKED                                       type.googleapis.com/envoy.config.route.v3.RouteConfiguration   
    
    1. After dumping the configuration file, it is found that the following configuration is used for normal http cgi routing
    virtual_hosts {
      name: "inner.mcgitest.hlddz.huanle.qq.com:50051"
      domains: "inner.mcgitest.hlddz.huanle.qq.com"
      domains: "inner.mcgitest.hlddz.huanle.qq.com:50051"
      routes {
        match {
          prefix: "/cgi-bin/CommonMobileCGI/pandoraCgiProxy"
          case_sensitive {
            value: true
          }
        }
        route {
          cluster: "outbound|50051|online|dev-pandoracgiproxy.hlddz.svc.cluster.local"
          timeout {
          }
          retry_policy {
            retry_on: "connect-failure,refused-stream,unavailable,cancelled,retriable-status-codes"
            num_retries {
              value: 2
            }
            retry_host_predicate {
              name: "envoy.retry_host_predicates.previous_hosts"
            }
            host_selection_retry_max_attempts: 5
            retriable_status_codes: 503
          }
          hash_policy {
            header {
              header_name: "routekey"
            }
          }
          max_stream_duration {
            max_stream_duration {
            }
          }
        }
        metadata {
          filter_metadata {
            key: "istio"
            value {
              fields {
                key: "config"
                value {
                  string_value: "/apis/networking.istio.io/v1alpha3/namespaces/hlddz/virtual-service/dev-pandoracgiproxy"
                }
              }
            }
          }
        }
        decorator {
          operation: "dev-pandoracgiproxy.hlddz.svc.cluster.local:50051/cgi-bin/CommonMobileCGI/pandoraCgiProxy*"
        }
      }
      include_request_attempt_count: true
    }
    
    1. After reading the source code, I found the following logic. When parsing the Routerconfiguration, the match field will be validated. When the configuration contains entries that do not conform to the grpc specification, the entire configuration update will be discarded. The source code is as follows
     const envoy_config_route_v3_Route* const* routes =
            envoy_config_route_v3_VirtualHost_routes(virtual_hosts[i], &num_routes);
        for (size_t j = 0; j < num_routes; ++j) {
          ValidationErrors::ScopedField field(errors, absl::StrCat("[", j, "]"));
          auto route = ParseRoute(context, routes[j], virtual_host_retry_policy,
                                  rds_update.cluster_specifier_plugin_map,
                                  &cluster_specifier_plugins_not_seen, errors);
          if (route.has_value()) vhost.routes.emplace_back(std::move(*route));
        }
        if (errors->size() == original_error_size && vhost.routes.empty()) {
          errors->AddError("no valid routes in VirtualHost");
        }
    
    if (envoy_config_route_v3_RouteMatch_has_prefix(match)) {
        absl::string_view prefix =
            UpbStringToAbsl(envoy_config_route_v3_RouteMatch_prefix(match));
        // For any prefix that cannot match a path of the form "/service/method",
        // ignore the route.
        if (!prefix.empty()) {
          // Does not start with a slash.
          if (prefix[0] != '/') return absl::nullopt;
          std::vector<absl::string_view> prefix_elements =
              absl::StrSplit(prefix.substr(1), absl::MaxSplits('/', 2));
          // More than 2 slashes.
          if (prefix_elements.size() > 2) return absl::nullopt;
          // Two consecutive slashes.
          if (prefix_elements.size() == 2 && prefix_elements[0].empty()) {
            return absl::nullopt;
          }
        }
        type = StringMatcher::Type::kPrefix;
        match_string = std::string(prefix);
      } 
    
    
    1. Our service runs in istio, which is a large heterogeneous system. There are grpc services and regular http cgi services, so the routing configuration may not conform to the grpc specification. Is it possible to just skip this piece of configuration when reading a configuration that does not meet the specifications, instead of discarding the entire configuration update, similar modifications are as follows
    for (size_t i = 0; i < num_virtual_hosts; ++i) {
        ...
        const envoy_config_route_v3_Route* const* routes =
            envoy_config_route_v3_VirtualHost_routes(virtual_hosts[i], &num_routes);
        for (size_t j = 0; j < num_routes; ++j) {
          ValidationErrors::ScopedField field(errors, absl::StrCat("[", j, "]"));
          auto route = ParseRoute(context, routes[j], virtual_host_retry_policy,
                                  rds_update.cluster_specifier_plugin_map,
                                  &cluster_specifier_plugins_not_seen, errors);
          if (route.has_value()) vhost.routes.emplace_back(std::move(*route));
        }
        if (errors->size() == original_error_size && vhost.routes.empty()) {
          // ignore this invalid virtualhost update
          continue;
        }
      }
    
    1. After I followed the above modification method, it worked well in my system. I think it may be more friendly to implement it in a heterogeneous operating environment. grpcdebug info
    Name                                                         Status    Version                     Type                                                                 LastUpdated
    outbound|50051|online|dev-meshgate.hlddz.svc.cluster.local   ACKED     2023-01-05T08:07:45Z/1425   type.googleapis.com/envoy.config.cluster.v3.Cluster                  13 seconds ago   
    outbound|50051|online|dev-nick.hlddz.svc.cluster.local       ACKED     2023-01-05T08:07:45Z/1425   type.googleapis.com/envoy.config.cluster.v3.Cluster                  15 seconds ago   
    outbound|50051|online|dev-meshgate.hlddz.svc.cluster.local   ACKED     2023-01-05T08:07:45Z/1425   type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment   13 seconds ago   
    outbound|50051|online|dev-nick.hlddz.svc.cluster.local       ACKED     2023-01-05T08:07:45Z/1425   type.googleapis.com/envoy.config.endpoint.v3.ClusterLoadAssignment   15 seconds ago   
    dev-meshgate:50051                                           ACKED     2023-01-05T08:07:45Z/1425   type.googleapis.com/envoy.config.listener.v3.Listener                13 seconds ago   
    dev-nick:50051                                               ACKED     2023-01-05T08:07:45Z/1425   type.googleapis.com/envoy.config.listener.v3.Listener                15 seconds ago   
    outbound|50051||dev-meshgate.hlddz.svc.cluster.local         ACKED     2023-01-05T08:07:45Z/1425   type.googleapis.com/envoy.config.route.v3.RouteConfiguration         13 seconds ago   
    outbound|50051||dev-nick.hlddz.svc.cluster.local             ACKED     2023-01-05T08:07:45Z/1425   type.googleapis.com/envoy.config.route.v3.RouteConfiguration         13 seconds ago 
    

    Anything else we should know about your project / environment?

    Both 1.51.x and the latest master have the above-mentioned problems, and the above-mentioned source code is the code of the latest master referenced

    kind/bug lang/c++ priority/P2 untriaged 
    opened by fahab0b 0
  • Fix order issue in setting grpc_tcp_client_impl in api_fuzzer

    Fix order issue in setting grpc_tcp_client_impl in api_fuzzer

    iomgr sets the grpc_tcp_client_impl vtable here as part of the first grpc_init which overwrites the fuzz_tcp_client_vtable set by api_fuzzer. This caused inconsistent behavior between whether api_fuzzer is used to run one test case or multiple test cases (since later test case run will overwrite the vtable again and use the intended one).

    lang/core release notes: no bloat/none per-call-memory/neutral per-channel-memory/neutral 
    opened by yijiem 0
  • [bazel 7.0.0] migrate --incompatible_disable_starlark_host_transitions

    [bazel 7.0.0] migrate --incompatible_disable_starlark_host_transitions

    opened by luxe 2
  • Grpc.Tools: Use x86 protoc binaries on arm64 Windows

    Grpc.Tools: Use x86 protoc binaries on arm64 Windows

    A workaround for https://github.com/grpc/grpc/issues/31975 - use x86 protoc binaries on Windows arm64.

    Unable to test as I don't have access to Windows-arm64.

    Also not sure how NUnit PlatformAttribute handles arm64 (could not find any information). It is possible that tests will fail if run on Windows-arm64 with full .NET framework if NUnit doesn't distinguish between x64 and arm64 (just identifies a 64 bit platform). Not sure that we run tests on Windows-arm64.

    lang/C# 
    opened by tonydnewell 0
  • Remove objc cfstream tests from run_tests.py

    Remove objc cfstream tests from run_tests.py

    Followup for https://github.com/grpc/grpc/pull/31555.

    objc CFStream tests now run under bazel.

    • there is no need for the complexity of "ios-test-cfstream-tests" under run_tests.py
    • ios-test-cfstream-tests is the last test task under the grpc_basictests_objc_ios test job, which means we'll be able to get rid of the job completely (the job is slow so this is welcome)
    • right now the actual test implementation in CFStreamClientTests.mm and CFStreamEndpointTests.mm is duplicated (there are 2 almost identical copies of each of the files in the repository).
    lang/ObjC lang/core release notes: no bloat/none per-call-memory/neutral per-channel-memory/neutral 
    opened by jtattermusch 5
Releases(v1.49.2)
  • v1.49.2(Dec 9, 2022)

    This is release 1.49.2 (gamma) of gRPC Core.

    For gRPC documentation, see grpc.io. For previous releases, see Releases.

    This release contains refinements, improvements, and bug fixes, with highlights listed below.

    All

    • Backport of https://github.com/grpc/grpc/pull/31357 to mitigate https://github.com/advisories/GHSA-cfmr-vrgj-vqwv #31595
    Source code(tar.gz)
    Source code(zip)
  • v1.51.1(Nov 29, 2022)

    This is release gRPC Core 1.51.1 (galaxy).

    For gRPC documentation, see grpc.io. For previous releases, see Releases.

    This release contains refinements, improvements, and bug fixes.

    Python

    • Revert "Build with System OpenSSL on Mac OS arm64 (#31096)". (#31739)
    Source code(tar.gz)
    Source code(zip)
  • v1.51.0(Nov 21, 2022)

    This is release gRPC Core 1.51.0 (galaxy).

    For gRPC documentation, see grpc.io. For previous releases, see Releases.

    This release contains refinements, improvements, and bug fixes.

    Core

    • Bump core version 202211082118. (#31585)
    • c-ares DNS resolver: fix logical race between resolution timeout/cancellation and fd readability. (#31443)
    • [log] Longer space for filenames. (#31432)
    • c-ares DNS resolver: remove unnecessary code in SRV callback. (#31426)
    • Correct the domain-socket client address read out from the ServerContext. (#31108)
    • outlier detection: remove env var protection. (#31251)
    • EventEngineFactoryReset - remove custom factory and reset default engine. (#30554)
    • [tls] Remove support for pthread tls. (#31040)

    C++

    • Added version macros to gRPC C++. (#31033)
    • OpenCensus: Move measures, views and CensusContext to include file. (#31341)
    • GcpObservability: Add experimental public target. (#31339)

    C#

    • Fix msbuild failing when '@' is present in path (2nd attempt). (#31527)
    • Revert "Fix msbuild failing when '@' is present in path". (#31464)
    • Fix msbuild failing when '@' is present in path. (#31133)

    PHP

    • fixing php 8.2 deprecations. (#30997)

    Python

    • Fix lack of cooldown between poll attempts. (#31550)
    • Build with System OpenSSL on Mac OS arm64. (#31096)
    • Remove enum and future. (#31381)
    • [Remove Six] Remove dependency on six. (#31340)
    • Update xds-protos package to pull in protobuf 4.X. (#31113)
    Source code(tar.gz)
    Source code(zip)
  • v1.51.0-pre1(Nov 14, 2022)

  • v1.50.1(Oct 27, 2022)

    This is release gRPC Core 1.50.1 (galley).

    For gRPC documentation, see grpc.io. For previous releases, see Releases.

    This release contains refinements, improvements, and bug fixes, with highlights listed below.

    All

    • Fix Bazel 4 support and objc bazel tests on python3.9 (#31410)
    Source code(tar.gz)
    Source code(zip)
  • v1.50.0(Oct 14, 2022)

    This is release gRPC Core 1.50.0 (galley).

    For gRPC documentation, see grpc.io. For previous releases, see Releases.

    This release contains refinements, improvements, and bug fixes, with highlights listed below.

    Core

    • Derive EventEngine from std::enable_shared_from_this. (#31060)
    • Revert "Revert "[chttp2] fix stream leak with queued flow control update and absence of writes (#30907)" (#30991)". (#30992)
    • [chttp2] fix stream leak with queued flow control update and absence of writes. (#30907)
    • Remove gpr_codegen. (#30899)
    • client_channel: allow LB policy to communicate update errors to resolver. (#30809)
    • FaultInjection: Fix random number generation. (#30623)

    C++

    • OpenCensus Plugin: Add measure and views for started RPCs. (#31034)

    C#

    • Grpc.Tools: Parse warnings from libprotobuf (fix #27502). (#30371)
    • Grpc.Tools add support for env variable GRPC_PROTOC_PLUGIN (fix #27099). (#30411)
    • Grpc.Tools document AdditionalImportDirs. (#30405)
    • Fix OutputOptions and GrpcOutputOptions (issue #25950). (#30410)

    Python

    • Support Python 3.11. (#30818)

    Ruby

    • Fix ruby windows ucrt build. (#31051)
    • Drop support for ruby 2.5. (#30699)
    Source code(tar.gz)
    Source code(zip)
  • v1.50.0-pre1(Sep 29, 2022)

  • v1.49.1(Sep 22, 2022)

    This is release 1.49.1 (gamma) of gRPC Core.

    For gRPC documentation, see grpc.io. For previous releases, see Releases.

    This release contains refinements, improvements, and bug fixes, with highlights listed below.

    All

    • Update protobuf to v21.6 on 1.49.x. (#31028)

    Ruby

    • Backport "Fix ruby windows ucrt build #31051" to 1.49.x. (#31053)
    Source code(tar.gz)
    Source code(zip)
  • v1.46.5(Sep 22, 2022)

    This is release 1.46.5 (golazo) of gRPC Core.

    For gRPC documentation, see grpc.io. For previous releases, see Releases.

    This release contains refinements, improvements, and bug fixes, with highlights listed below.

    All

    • Update protobuf to v3.19.5 on v1.46.x. (#31032)

    Core

    • Backport to 1.46.x: priority and ring_hash LBs: fix interactions when using ring_hash under priority (#29332). (#30253)
    • Backport to v1.46.x: ring hash: fix picker propagation bug in xds_cluster_manager policy (#29959). (#30254)

    C#

    • Fix client resource leaks-issues 8451 and 28153. (#30290)
    Source code(tar.gz)
    Source code(zip)
  • v1.48.2(Sep 22, 2022)

  • v1.47.2(Sep 22, 2022)

  • v1.49.0(Sep 14, 2022)

    This is release 1.49.0 (gamma) of gRPC Core.

    For gRPC documentation, see grpc.io. For previous releases, see Releases.

    This release contains refinements, improvements, and bug fixes, with highlights listed below.

    Core

    • Backport: "stabilize the C2P resolver URI scheme" to v1.49.x. (#30654)
    • Bump core version. (#30588)
    • Update OpenCensus to HEAD. (#30567)
    • Update protobuf submodule to 3.21.5. (#30548)
    • Update third_party/protobuf to 3.21.4. (#30377)
    • [core] Remove GRPC_INITIAL_METADATA_CORKED flag. (#30443)
    • HTTP2: Fix keepalive time throttling. (#30164)
    • Use AnyInvocable in EventEngine APIs. (#30220)

    Python

    • Support Python 3.11 (#30818). (#30944)
    • Add type stub generation support to grpcio-tools. (#30498)

    Ruby

    • Backport "Drop support for ruby 2.5 (#30699)" to v1.49.x. (#30762)
    Source code(tar.gz)
    Source code(zip)
    grpc_objective_c_core-1.49.0-xcframework.zip(15.20 MB)
    grpc_objective_c_grpc-1.49.0-xcframework.zip(872.29 KB)
    grpc_objective_c_plugin-1.49.0-macos-x86_64.zip(1.18 MB)
    grpc_objective_c_protorpc-1.49.0-xcframework.zip(102.38 KB)
  • v1.49.0-pre3(Sep 1, 2022)

  • v1.49.0-pre2(Aug 30, 2022)

  • v1.48.1(Aug 31, 2022)

  • v1.49.0-pre1(Aug 18, 2022)

  • v1.48.0(Jul 19, 2022)

    This is release 1.48.0 (garum) of gRPC Core.

    For gRPC documentation, see grpc.io. For previous releases, see Releases.

    This release contains refinements, improvements, and bug fixes, with highlights listed below.

    Core

    • Upgrade Abseil to LTS 20220623.0 . (#30155)
    • Call: Send cancel op down the stack even when no ops are sent. (#30004)
    • FreeBSD system roots implementation. (#29436)
    • xDS: Workaround to get gRPC clients working with istio. (#29841)

    Python

    • Set Correct Platform Tag in Wheels on Mac OS with Python 3.10. (#29857)
    • [Aio] Ensure Core channel closes when deallocated. (#29797)
    • [Aio] Fix the wait_for_termination return value. (#29795)

    Ruby

    • Make the gem build on TruffleRuby. (#27660)
    • Support for prebuilt Ruby binary on x64-mingw-ucrt platform. (#29684)
    • [Ruby] Add ruby_abi_version to exported symbols. (#28976)

    Objective-C

    First developer preview of XCFramework binary distribution via Cocoapod (#28749).

    This brings in significant speed up to local compile time and includes support for Apple Silicon build.

    • The following binary pods are made available for ObjC V1 & V2 API
      • gRPC-XCFramework (source pod gRPC)
      • gRPC-ProtoRPC-XCFramework (source pod gRPC-ProtoRPC)
    • The following platforms and architectures are included
      • ios: armv7, arm64 for device. arm64, i386, x86_64 for simulator
      • macos: x86_64 (Intel), arm64 (Apple Silicon)
    Source code(tar.gz)
    Source code(zip)
    grpc_objective_c_core-1.48.0-xcframework.zip(58.66 MB)
    grpc_objective_c_grpc-1.48.0-xcframework.zip(1.77 MB)
    grpc_objective_c_plugin-1.48.0-macos-x86_64.zip(1.16 MB)
    grpc_objective_c_protorpc-1.48.0-xcframework.zip(256.14 KB)
  • v1.47.1(Jul 15, 2022)

    This is release gRPC Core 1.47.1 (gridman).

    For gRPC documentation, see grpc.io. For previous releases, see Releases.

    This release contains refinements, improvements, and bug fixes.

    Core

    • [Backport] Using string rep for status-time (#30123) #30145
    • [Backport] Tell MSVC to build grpc with utf-8 (#30003) #30153
    • [Backport] Ring hash: fix picker propagation bug in xds_cluster_manager policy (#29959) #30241
    Source code(tar.gz)
    Source code(zip)
  • v1.46.4(Jul 6, 2022)

    This is release gRPC Core 1.46.4 (golazo).

    For gRPC documentation, see grpc.io. For previous releases, see Releases.

    This release contains refinements, improvements, and bug fixes.

    Core

    • [Backport] Using string rep for status-time (#30123) #30146
    Source code(tar.gz)
    Source code(zip)
  • v1.48.0-pre1(Jul 5, 2022)

  • v1.47.0(Jun 22, 2022)

    This is release 1.47.0 (gridman) of gRPC Core.

    For gRPC documentation, see grpc.io. For previous releases, see Releases.

    This release contains refinements, improvements, and bug fixes, with highlights listed below.

    Announcement

    gRPC C++ 1.47.0 is the first release requiring C++14 (proposal). For those who cannot upgrade to C++14 right now, you can use gRPC C++ 1.46.x in the meantime and gRPC C++ 1.46.x will be maintained by having fixes for critical bugs (P0) and security fixes until 2023-06-01.

    Core

    • xDS: Workaround to get gRPC clients working with istio (#29841). (#29850)
    • Bump core version to 25.0.0 for upcoming release. (#29775)
    • Initial support for Haiku. (#27793)
    • Add NetBSD support (Community-supported). (#29542)
    • server: per-rpc backend metric reporting. (#29621)
    • Remove C# implementation (individual packages will continue to be maintained through v2.46.x patches or moved to grpc-dotnet). (#29225)

    C++

    • Expose NoOpCertificateVerifier to C++. (#29322)
    • RouteGuide example: Abort if database file not found. (#29398)

    C#

    • C#: Suppress CS8981 in generated source. (#29708)

    Python

    • Set Correct Platform Tag in Wheels on Mac OS with Python 3.10 (#29857). (#30026)
    • Removed manylinux2010 python artifacts. (#29734)
    • Allow grpcio to be built against system abseil-cpp. (#27550)
    • [Python] Add an UDS example. (#29592)

    Ruby

    • Backport "Support for prebuilt Ruby binary on x64-mingw-ucrt platform (#29684)" to 1.47.x. (#29868)
    • Upgrade ruby rake-compiler-dock images (and stop building ruby gem artifacts on mac, in favor of rake-compile-dock darwin builds). (#29304)

    Other

    • Downgrade io_bazel_rules_go to v0.27.0 restore Bazel 3.x support. (#29596)
    Source code(tar.gz)
    Source code(zip)
    grpc_objective_c_plugin-1.47.0-macos-x86_64.zip(1.16 MB)
  • v1.47.0-pre1(Jun 17, 2022)

    This is a prerelease of gRPC Core 1.47.0 (gridman).

    Please see the notes for the previous releases here: https://github.com/grpc/grpc/releases. Please consult https://grpc.io/ for all information regarding this product.

    This prerelease contains refinements, improvements, and bug fixes.

    Source code(tar.gz)
    Source code(zip)
  • v1.46.3(May 20, 2022)

  • v1.46.2(May 16, 2022)

    This is release gRPC Core 1.46.2 (golazo).

    For gRPC documentation, see grpc.io. For previous releases, see Releases.

    This release contains refinements, improvements, and bug fixes.

    Ruby

    • Backport "[Ruby]fix a rake compile error since rake-compiler ~> 1.1 (#28666)". (#29656)
    • Backport "Upgrade ruby rake-compiler-dock images (#29304)". (#29657)
    Source code(tar.gz)
    Source code(zip)
  • v1.46.1(May 11, 2022)

  • v1.46.0(May 4, 2022)

    This is release 1.46.0 (golazo) of gRPC Core.

    For gRPC documentation, see grpc.io. For previous releases, see Releases.

    This release contains refinements, improvements, and bug fixes, with highlights listed below.

    Announcement

    gRPC C++ 1.46 will be the last release supporting C++11, future releases will require C++ >= 14. We plan to backport critical (P0) bugs and security fixes to this release for a year, that is, until 2023-06-01. This change won't bump the major version of gRPC since this doesn't introduce API changes. Hence, the next version requiring C++14 will be 1.47 (context).

    Core

    • Ignore Connection Aborted errors on accept. (#29318)
    • Filter content-length metadata from the application. (#29295)
    • RetryFilter: Cleanup pending byte stream. (#29245)
    • HTTP Proxy: Ignore empty entry in no_proxy list. (#29217)
    • Adding http/1.1 support in httpcli. (#29238)
    • HTTP2: Initiate write for acknowledging SETTINGS frame. (#29218)
    • Change the unsupported polling strategy log for forking to GPR_INFO. (#29232)
    • Handle SSL_ERROR_WANT_WRITE error. (#29176)
    • TCP Async Connect: Fix Heap use-after-free. (#29209)
    • HTTP2: Add graceful goaway. (#29050)
    • Remove epollex poller. (#29160)
    • TlsCredentials: Comparator implementation. (#28940)
    • Decrease verbosity of alts handshaker logs which can happen during cancellation. (#29058)
    • HTTP2: Should not run cancelling logic on servers when receiving GOAWAY. (#29067)
    • HTTP2: Don't throttle pings from the server. (#29053)
    • Include ADS stream error in XDS error updates. (#29014)
    • Remove idempotent/cacheable requests. (#28922)

    C++

    • Add bazel cpp distribtest for grpc_cc_library. (#29175)

    C#

    • Add support for grpc-dotnet in GKE benchmarks. (#28975)
    • Sync unary call after shutdown: Add a repro and fix for #19090 . (#23003)
    • Remove C# Legacy (a.k.a. "Classic") csproj example. (#29102)

    Python

    • Add Python GCF Distribtest. (#29303)
    • Add Python Reflection Client. (#29085)
    • Revert "Fix prefork handler register's default behavior". (#29229)
    • Fix prefork handler register's default behavior. (#29103)
    • Fix fetching CXX variable in setup.py. (#28873)

    Ruby

    • Support pre-built binaries for Ruby 3.1. (#29000)
    • Make sure to always receive initial metadata in ruby. (#29155)
    Source code(tar.gz)
    Source code(zip)
    grpc_objective_c_plugin-1.46.0-macos-x86_64.zip(1.16 MB)
  • v1.46.0-pre2(Apr 22, 2022)

  • v1.46.0-pre1(Apr 18, 2022)

  • v1.45.2(Apr 8, 2022)

    This is release 1.45.2 (gravity) of gRPC Core.

    For gRPC documentation, see grpc.io. For previous releases, see Releases.

    This release contains refinements, improvements, and bug fixes, with highlights listed below.

    Core

    • Various fixes related to XDS (https://github.com/grpc/grpc/pull/29314, https://github.com/grpc/grpc/pull/29340, https://github.com/grpc/grpc/pull/29339)
    • HTTP2: Should not run cancelling logic on servers when receiving GOAWAY (https://github.com/grpc/grpc/pull/29307)
    Source code(tar.gz)
    Source code(zip)
  • v1.45.1(Apr 1, 2022)

    This is release 1.45.1 (gravity) of gRPC Core.

    For gRPC documentation, see grpc.io. For previous releases, see Releases.

    This release contains refinements, improvements, and bug fixes, with highlights listed below.

    Core

    • Switched to epoll1 as a default polling engine for Linux (#29239)
    • Various fixes related to XDS (https://github.com/grpc/grpc/pull/29240, https://github.com/grpc/grpc/pull/29242, https://github.com/grpc/grpc/pull/29243, https://github.com/grpc/grpc/pull/29244, https://github.com/grpc/grpc/pull/29280)

    Python

    • Revert "Remove GRPC_ENABLE_FORK_SUPPORT from setup.py" (#29230)
    Source code(tar.gz)
    Source code(zip)
Owner
grpc
A high performance, open source, general-purpose RPC framework
grpc
FuelPHP v1.x is a simple, flexible, community driven PHP 5.3+ framework, based on the best ideas of other frameworks, with a fresh start! FuelPHP is fully PHP 7 compatible.

FuelPHP Version: 1.8.2 Website Release Documentation Release API browser Development branch Documentation Development branch API browser Support Forum

Fuel 1.5k Dec 28, 2022
Hello, this is simple attribute validation for PHP Models, based on the new features, presented in PHP 8

Hello, this is simple attribute validation for PHP Models, based on the new features, presented in PHP 8 It works as a standalone and can be use in custom projects or in libraries like Symfony and Laravel.

Ivan Grigorov 88 Dec 30, 2022
🚀 Coroutine-based concurrency library for PHP

English | 中文 Swoole is an event-driven asynchronous & coroutine-based concurrency networking communication engine with high performance written in C++

Swoole Project 17.7k Jan 8, 2023
High performance HTTP Service Framework for PHP based on Workerman.

webman High performance HTTP Service Framework for PHP based on Workerman. Manual https://www.workerman.net/doc/webman Benchmarks https://www.techempo

walkor 1.3k Jan 2, 2023
Symprowire is a PHP MVC Framework based and built on Symfony, using the ProcessWire CMS as DBAL and Service Provider.

Symprowire - PHP MVC Framework for ProcessWire 3.x Symprowire is a PHP MVC Framework based and built on Symfony using ProcessWire 3.x as DBAL and Serv

Luis Mendez 7 Jan 16, 2022
Bootcamp project based on PHP-MVC using MySQL database.

Up-Stream This is the implementation of a full website based on PHP MVC. Using MySql database to create a website. And Bootstrap4 for front-end. Start

AmirH.Najafizadeh 4 Jul 31, 2022
A server side alternative implementation of socket.io in PHP based on workerman.

phpsocket.io A server side alternative implementation of socket.io in PHP based on Workerman. Notice Only support socket.io v1.3.0 or greater. This pr

walkor 2.1k Jan 6, 2023
Framework X is a simple and fast micro framework based on PHP

Framework X is a simple and fast micro framework based on PHP. I've created a simple CRUD application to understand how it works. I used twig and I created a custom middleware to handle PUT, DELETE methods.

Mahmut Bayri 6 Oct 14, 2022
Jin microservices is a complete microservice demo based on PHP language + hyperf microservices framework

介绍 Jin-microservices是基于 php 语言 + hyperf 微服务 框架的完整微服务demo。 github:https://github.com/Double-Jin/jin-microservices gitee:https://gitee.com/ljj96/jin-mic

null 114 Dec 29, 2022
Software for an e-book library, in Bulgarian only. Based on Symfony3 and Doctrine 2.

chitanka.info core Това е уеб софтуер, който задвижва „Моята библиотека“. Изграден е с помощта на Symfony3, Doctrine 2 и много други прекрасни свободн

null 46 Oct 1, 2022
Railway Flow Based Programming

Why ? Railway Flow Based Programming concept aims to solve Adopt asynchronous as native implementation Build your code with functional programming and

Darkwood 9 Dec 27, 2022
This JSON marshaller is based on the one built into FEAST framework

Standalone JSON marshaller based off the one built into FEAST framework at feast/framework on packagist or feastframework/framework on github

null 13 Dec 9, 2022
Ergonode is modern PIM platform based on Symfony and Vue.js frameworks.

Modern Product Information Management Platform Ergonode is modern PIM platform based on Symfony and Vue.js frameworks. It has modular structure and gi

Ergonode 100 Dec 19, 2022
a framework for WebDevelop based on the mvc structure. The name of this project for Fun because everyone can use it. Completely simple and powerful structure for all your projects

A_A (-.-) ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ |-| █▄─▄▄─█▄─██─▄█─▄▄▄▄█─▄▄▄▄█▄─█─▄█─▄▄▄─██▀▄─██─▄

MasihGhaznavi 7 Jun 29, 2022
Hyperf instant messaging program based on swoole framework

Hyperf instant messaging program based on swoole framework

null 20 Aug 12, 2022
An issue tracking tool based on hyperf+reactjs for small and medium-sized enterprises, open-source and free, similar to Jira.

介绍 本项目以 actionview 为蓝本,使用 Hyperf 框架进行重写。 本项目为 Hyperf 框架的 DEMO 项目 原 ActionView 介绍 English | 中文 一个类Jira的问题需求跟踪工具,前端基于reactjs+redux、后端基于php laravel-frame

Gemini-D 14 Nov 15, 2022
🎁 Datagrid component project skeleton based on Nette Framework

?? Datagrid component project skeleton based on Nette Framework

Contributte 4 Dec 14, 2022
Asynchronous tasks based on ticks.

TickAsync Asynchronous tasks based on ticks. If you like this project gift us a ⭐ . Installation. $ composer require thenlabs/task-loop 2.0.x-dev then

ThenLabs 1 Jan 3, 2022
Hprose asynchronous client & standalone server based on swoole

Hprose for Swoole Introduction Hprose is a High Performance Remote Object Service Engine. It is a modern, lightweight, cross-language, cross-platform,

Hprose 186 Sep 9, 2022