GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - JavaMuller/grpc-java: The Java gRPC implementation. HTTP/2 based RPC

BranchesTags
Open more actions menu
 
 

Latest commit

 

History

1,811 Commits
1,811 Commits

Folders and files

NameName
Last commit message
Last commit date
.github
.github
 
 
all
all
 
 
android-interop-testing
android-interop-testing
 
 
auth
auth
 
 
benchmarks
benchmarks
 
 
buildscripts
buildscripts
 
 
compiler
compiler
 
 
context
context
 
 
core
core
 
 
documentation
documentation
 
 
examples
examples
 
 
gradle/wrapper
gradle/wrapper
 
 
grpclb
grpclb
 
 
interop-testing
interop-testing
 
 
netty
netty
 
 
okhttp
okhttp
 
 
protobuf-lite
protobuf-lite
 
 
protobuf-nano
protobuf-nano
 
 
protobuf
protobuf
 
 
services
services
 
 
stub
stub
 
 
testing-proto
testing-proto
 
 
testing
testing
 
 
thrift
thrift
 
 
.gitattributes
.gitattributes
 
 
.gitignore
.gitignore
 
 
.travis.yml
.travis.yml
 
 
CHANGES.md
CHANGES.md
 
 
COMPILING.md
COMPILING.md
 
 
CONTRIBUTING.md
CONTRIBUTING.md
 
 
LICENSE
LICENSE
 
 
NOTICE.txt
NOTICE.txt
 
 
PATENTS
PATENTS
 
 
README.md
README.md
 
 
RELEASING.md
RELEASING.md
 
 
SECURITY.md
SECURITY.md
 
 
build.gradle
build.gradle
 
 
checkstyle.license
checkstyle.license
 
 
checkstyle.xml
checkstyle.xml
 
 
codecov.yml
codecov.yml
 
 
gradlew
gradlew
 
 
gradlew.bat
gradlew.bat
 
 
run-test-client.sh
run-test-client.sh
 
 
run-test-server.sh
run-test-server.sh
 
 
settings.gradle
settings.gradle
 
 

Repository files navigation

gRPC-Java - An RPC library and framework

gRPC-Java works with JDK 6. TLS usage typically requires using Java 8, or Play Services Dynamic Security Provider on Android. Please see the Security Readme.

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

Join the chat at https://gitter.im/grpc/grpc Build Status Coverage Status

Download

Download the JARs. Or for Maven with non-Android, add to your pom.xml:

<dependency>
  <groupId>io.grpc</groupId>
  <artifactId>grpc-netty</artifactId>
  <version>1.0.3</version>
</dependency>
<dependency>
  <groupId>io.grpc</groupId>
  <artifactId>grpc-protobuf</artifactId>
  <version>1.0.3</version>
</dependency>
<dependency>
  <groupId>io.grpc</groupId>
  <artifactId>grpc-stub</artifactId>
  <version>1.0.3</version>
</dependency>

Or for Gradle with non-Android, add to your dependencies:

compile 'io.grpc:grpc-netty:1.0.3'
compile 'io.grpc:grpc-protobuf:1.0.3'
compile 'io.grpc:grpc-stub:1.0.3'

For Android client, use grpc-okhttp instead of grpc-netty and grpc-protobuf-lite or grpc-protobuf-nano instead of grpc-protobuf:

compile 'io.grpc:grpc-okhttp:1.0.3'
compile 'io.grpc:grpc-protobuf-lite:1.0.3'
compile 'io.grpc:grpc-stub:1.0.3'

Development snapshots are available in Sonatypes's snapshot repository.

For protobuf-based codegen, you can put your proto files in the src/main/proto and src/test/proto directories along with an appropriate plugin.

For protobuf-based codegen integrated with the Maven build system, you can use protobuf-maven-plugin (Eclipse and NetBeans users should also look at os-maven-plugin's IDE documentation):

<build>
  <extensions>
    <extension>
      <groupId>kr.motd.maven</groupId>
      <artifactId>os-maven-plugin</artifactId>
      <version>1.4.1.Final</version>
    </extension>
  </extensions>
  <plugins>
    <plugin>
      <groupId>org.xolstice.maven.plugins</groupId>
      <artifactId>protobuf-maven-plugin</artifactId>
      <version>0.5.0</version>
      <configuration>
        <protocArtifact>com.google.protobuf:protoc:3.0.2:exe:${os.detected.classifier}</protocArtifact>
        <pluginId>grpc-java</pluginId>
        <pluginArtifact>io.grpc:protoc-gen-grpc-java:1.0.3:exe:${os.detected.classifier}</pluginArtifact>
      </configuration>
      <executions>
        <execution>
          <goals>
            <goal>compile</goal>
            <goal>compile-custom</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

For protobuf-based codegen integrated with the Gradle build system, you can use protobuf-gradle-plugin:

apply plugin: 'java'
apply plugin: 'com.google.protobuf'

buildscript {
  repositories {
    mavenCentral()
  }
  dependencies {
    // ASSUMES GRADLE 2.12 OR HIGHER. Use plugin version 0.7.5 with earlier
    // gradle versions
    classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.0'
  }
}

protobuf {
  protoc {
    artifact = "com.google.protobuf:protoc:3.0.2"
  }
  plugins {
    grpc {
      artifact = 'io.grpc:protoc-gen-grpc-java:1.0.3'
    }
  }
  generateProtoTasks {
    all()*.plugins {
      grpc {}
    }
  }
}

How to Build

If you are making changes to gRPC-Java, see the compiling instructions.

Navigating Around the Source

Here's a quick readers' guide to the code to help folks get started. At a high level there are three distinct layers to the library: Stub, Channel & Transport.

Stub

The Stub layer is what is exposed to most developers and provides type-safe bindings to whatever datamodel/IDL/interface you are adapting. gRPC comes with a plugin to the protocol-buffers compiler that generates Stub interfaces out of .proto files, but bindings to other datamodel/IDL should be trivial to add and are welcome.

Key Interfaces

Stream Observer

Channel

The Channel layer is an abstraction over Transport handling that is suitable for interception/decoration and exposes more behavior to the application than the Stub layer. It is intended to be easy for application frameworks to use this layer to address cross-cutting concerns such as logging, monitoring, auth etc. Flow-control is also exposed at this layer to allow more sophisticated applications to interact with it directly.

Common

  • Metadata - headers & trailers
  • Status - error code namespace & handling

Client

  • Channel - client side binding
  • Client Call
  • Client Interceptor

Server

  • Server call handler - analog to Channel on server
  • Server Call

Transport

The Transport layer does the heavy lifting of putting and taking bytes off the wire. The interfaces to it are abstract just enough to allow plugging in of different implementations. Transports are modeled as Stream factories. The variation in interface between a server Stream and a client Stream exists to codify their differing semantics for cancellation and error reporting.

Note the transport layer API is considered internal to gRPC and has weaker API guarantees than the core API under package io.grpc.

gRPC comes with three Transport implementations:

  1. The Netty-based transport is the main transport implementation based on Netty. It is for both the client and the server.
  2. The OkHttp-based transport is a lightweight transport based on OkHttp. It is mainly for use on Android and is for client only.
  3. The inProcess transport is for when a server is in the same process as the client. It is useful for testing.

Common

  • Stream
  • Stream Listener

Client

  • Client Stream
  • Client Stream Listener

Server

  • Server Stream
  • Server Stream Listener

Examples

The examples and the Android example are standalone projects that showcase the usage of gRPC.

About

The Java gRPC implementation. HTTP/2 based RPC

grpc.io

Resources

Readme
BSD-3-Clause license

Contributing

Contributing

Security policy

Security policy
Activity
Custom properties

Stars

0 stars

Watchers

0 watching

Forks

0 forks
Report repository

Releases

Packages

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.