Tonic: 0.1 has arrived!

栏目: IT技术 · 发布时间: 6年前

内容简介:Since the firstTonic was originally released as an alpha because a majority of the crates it depended on were also alphas.

tonic is a gRPC over HTTP/2 implementation focused on high performance, interoperability, and flexibility. It has been a few months since I originally released the 0.1.0-alpha.1 version. Since then there has been a ton of growth and improvements. We’ve seen 32 new contributors , two new guides , 8 more examples and 5 releases . Not only have we seen a lot of growth internally but we’ve also seen a large amount of adoption.

Changes

Since the first 0.1.0-alpha.1 release, Tonic made several ergonomic changes.

Upgrades EVERYWHERE

Tonic was originally released as an alpha because a majority of the crates it depended on were also alphas. 0.1 signifies that all our dependencies are as lean as possible. For instance: syn and quote are at 1.0, bytes is set to 0.5 and hyper is at 0.13 Thanks to all the maintainers for helping push out all these releases! Also, I would like to note that cargo-deny has been very helpful in ensuring that we have no duplicate dependencies!

Goodbye openssl, hello rustls

The build-in transport module no longer supports openssl . Instead, Tonic defaults to rustls , which should simplify building Tonic-based applications and libraries. However, I recognize that Tonic users might want to use a different TLS library, so Tonic supports customization via constructor client and constructor server .

Interceptors

Tonic also supports gRPC interceptors (non-gRPC ecosystems might refer to “interceptors” as “middleware”). Like the name suggests, interceptors allow clients and servers to intercept a request and perform an arbitrary action, like adding headers to sign a request or logging a request. See the example below:

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let channel = Endpoint::from_static("http://[::1]:50051")
        .connect()
        .await?;
    let mut client = GreeterClient::with_interceptor(channel, intercept);
   // snip
}
/// This function will get called on each outbound request. Returning a
/// `Status` here will cancel the request and have that status returned to
/// the client.
fn intercept(req: Request<()>) -> Result<Request<()>, Status> {
    println!("Intercepting request: {:?}", req);
    Ok(req)
}

One key thing to note here is that these interceptors are transport agnostic. They are pure gRPC, it does not matter where you get the request from, it could be via grpc-web or http2 .

More examples of this usage can be found here .

v0.1.0

I’d like to give a special shoutout to all those that helped the project grow by opening issues, trying Tonic out and opening PRs.

That said, I am super happy to finally release the 0.1 release of tonic . This is the first stepping stone in a great ecosystem built on top of tower . As always, there is a changelog and an issue tracker if you run into any issues. Please, feel welcome to also join us on discord if you need any help!

Back to posts


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

计算机算法基础

计算机算法基础

沈孝钧 / 机械工业出版社 / 2013-11 / 45.00元

计算机算法是计算机科学的一个重要分支,也是一个难点。本书作者根据自己20多年在国内、国外的教学与科研实践,系统地总结了计算机算法的设计与分析方法,覆盖了大部分最主要的算法技术,包括:分治法、贪心法、动态规划、图的遍历技术、穷举搜索等,涉及一系列重要的算法问题,包括排序问题、选择问题、最小生成树问题、最短路径问题、网络流问题、二分图的匹配问题、字符串的匹配问题和几何算法问题等,还介绍了问题本身的计算......一起来看看 《计算机算法基础》 这本书的介绍吧!

URL 编码/解码
URL 编码/解码

URL 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具