153 lines
6.0 KiB
Markdown
153 lines
6.0 KiB
Markdown

|
|
|
|
A rust implementation of [gRPC], a high performance, open source, general
|
|
RPC framework that puts mobile and HTTP/2 first.
|
|
|
|
[`tonic`] is a gRPC over HTTP/2 implementation focused on high performance, interoperability, and flexibility. This library was created to have first class support of async/await and to act as a core building block for production systems written in Rust.
|
|
|
|
[](https://crates.io/crates/tonic)
|
|
[](https://docs.rs/tonic)
|
|
[](LICENSE)
|
|
|
|
|
|
[Examples] | [Website] | [Docs] | [Chat]
|
|
|
|
## Overview
|
|
|
|
[`tonic`] is composed of three main components: the generic gRPC implementation, the high performance HTTP/2
|
|
implementation and the codegen powered by [`prost`]. The generic implementation can support any HTTP/2
|
|
implementation and any encoding via a set of generic traits. The HTTP/2 implementation is based on [`hyper`],
|
|
a fast HTTP/1.1 and HTTP/2 client and server built on top of the robust [`tokio`] stack. The codegen
|
|
contains the tools to build clients and servers from [`protobuf`] definitions.
|
|
|
|
## Features
|
|
|
|
- Bi-directional streaming
|
|
- High performance async io
|
|
- Interoperability
|
|
- TLS backed by [`rustls`]
|
|
- Load balancing
|
|
- Custom metadata
|
|
- Authentication
|
|
- Health Checking
|
|
|
|
## Getting Started
|
|
|
|
Examples can be found in [`examples`] and for more complex scenarios [`interop`]
|
|
may be a good resource as it shows examples of many of the gRPC features.
|
|
|
|
If you're using [rust-analyzer] we recommend you set `"rust-analyzer.cargo.buildScripts.enable": true` to correctly load
|
|
the generated code.
|
|
|
|
For IntelliJ IDEA users, please refer to [this](https://github.com/intellij-rust/intellij-rust/pull/8056) and enable
|
|
`org.rust.cargo.evaluate.build.scripts`
|
|
[experimental feature](https://plugins.jetbrains.com/plugin/8182-rust/docs/rust-faq.html#experimental-features).
|
|
|
|
### Rust Version
|
|
|
|
`tonic` currently works on Rust `1.56` and above as it requires support for the 2018 edition.
|
|
|
|
```bash
|
|
$ rustup update
|
|
$ cargo build
|
|
```
|
|
|
|
### Dependencies
|
|
|
|
In order to build `tonic` >= 0.8.0, you need the `protoc` Protocol Buffers compiler, along with Protocol Buffers resource files.
|
|
|
|
#### Ubuntu
|
|
|
|
```bash
|
|
sudo apt update && sudo apt upgrade -y
|
|
sudo apt install -y protobuf-compiler libprotobuf-dev
|
|
```
|
|
|
|
#### Alpine Linux
|
|
|
|
```sh
|
|
sudo apk add protoc protobuf-dev
|
|
```
|
|
|
|
#### macOS
|
|
|
|
Assuming [Homebrew](https://brew.sh/) is already installed. (If not, see instructions for installing Homebrew on [the Homebrew website](https://brew.sh/).)
|
|
|
|
```zsh
|
|
brew install protobuf
|
|
```
|
|
|
|
#### Windows
|
|
|
|
- Download the latest version of `protoc-xx.y-win64.zip` from [HERE](https://github.com/protocolbuffers/protobuf/releases/latest)
|
|
- Extract the file `bin\protoc.exe` and put it somewhere in the `PATH`
|
|
- Verify installation by opening a command prompt and enter `protoc --version`
|
|
|
|
### Tutorials
|
|
|
|
- The [`helloworld`][helloworld-tutorial] tutorial provides a basic example of using `tonic`, perfect for first time users!
|
|
- The [`routeguide`][routeguide-tutorial] tutorial provides a complete example of using `tonic` and all its
|
|
features.
|
|
|
|
## Getting Help
|
|
|
|
First, see if the answer to your question can be found in the API documentation.
|
|
If the answer is not there, there is an active community in
|
|
the [Tonic Discord channel][chat]. We would be happy to try to answer your
|
|
question. If that doesn't work, try opening an [issue] with the question.
|
|
|
|
[chat]: https://discord.gg/6yGkFeN
|
|
[issue]: https://github.com/hyperium/tonic/issues/new
|
|
|
|
## Project Layout
|
|
|
|
- [`tonic`](https://github.com/hyperium/tonic/tree/master/tonic): Generic gRPC and HTTP/2 client/server
|
|
implementation.
|
|
- [`tonic-build`](https://github.com/hyperium/tonic/tree/master/tonic-build): [`prost`] based service codegen.
|
|
- [`tonic-types`](https://github.com/hyperium/tonic/tree/master/tonic-types): [`prost`] based grpc utility types
|
|
including support for gRPC Well Known Types.
|
|
- [`tonic-health`](https://github.com/hyperium/tonic/tree/master/tonic-health): Implementation of the standard [gRPC
|
|
health checking service][healthcheck]. Also serves as an example of both unary and response streaming.
|
|
- [`tonic-reflection`](https://github.com/hyperium/tonic/tree/master/tonic-reflection): A tonic based gRPC
|
|
reflection implementation.
|
|
- [`examples`](https://github.com/hyperium/tonic/tree/master/examples): Example gRPC implementations showing off
|
|
tls, load balancing and bi-directional streaming.
|
|
- [`interop`](https://github.com/hyperium/tonic/tree/master/interop): Interop tests implementation.
|
|
|
|
## Contributing
|
|
|
|
:balloon: Thanks for your help improving the project! We are so happy to have
|
|
you! We have a [contributing guide][guide] to help you get involved in the Tonic
|
|
project.
|
|
|
|
[guide]: CONTRIBUTING.md
|
|
|
|
## License
|
|
|
|
This project is licensed under the [MIT license](LICENSE).
|
|
|
|
### Contribution
|
|
|
|
Unless you explicitly state otherwise, any contribution intentionally submitted
|
|
for inclusion in Tonic by you, shall be licensed as MIT, without any additional
|
|
terms or conditions.
|
|
|
|
|
|
[gRPC]: https://grpc.io
|
|
[`tonic`]: https://github.com/hyperium/tonic
|
|
[`tokio`]: https://github.com/tokio-rs/tokio
|
|
[`hyper`]: https://github.com/hyperium/hyper
|
|
[`prost`]: https://github.com/tokio-rs/prost
|
|
[`protobuf`]: https://developers.google.com/protocol-buffers
|
|
[`rustls`]: https://github.com/rustls/rustls
|
|
[`examples`]: https://github.com/hyperium/tonic/tree/master/examples
|
|
[`interop`]: https://github.com/hyperium/tonic/tree/master/interop
|
|
[Examples]: https://github.com/hyperium/tonic/tree/master/examples
|
|
[Website]: https://github.com/hyperium/tonic
|
|
[Docs]: https://docs.rs/tonic
|
|
[Chat]: https://discord.gg/6yGkFeN
|
|
[routeguide-tutorial]: https://github.com/hyperium/tonic/blob/master/examples/routeguide-tutorial.md
|
|
[helloworld-tutorial]: https://github.com/hyperium/tonic/blob/master/examples/helloworld-tutorial.md
|
|
[healthcheck]: https://github.com/grpc/grpc/blob/master/doc/health-checking.md
|
|
[rust-analyzer]: https://rust-analyzer.github.io
|