Tokio 1.0の安定バージョンがリリースされました。TokioはRustの非同期ランタイムであり、高速で信頼性の高いネットワークアプリケーションの作成に使用できます。Tokioは、TCP、UDP、タイマー、マルチスレッド、ワークスティーリングスケジューリングなどのAPIも提供します。
Tokioチームは、Tokioは4年前の誕生以来進化を続けてきましたが、Rustが当時の非同期/待機を公式にサポートしていたため、1年前に大きな変化が起こったと述べました。
サンプルコード
Tokioによって書かれた基本的なTCPエコーサーバー:
tokio :: net :: TcpListenerを使用します。 tokio :: io :: {AsyncReadExt、AsyncWriteExt}を使用します。 #[tokio :: main] async fn main()-> Result <()、Box <dyn std :: error :: Error >> { let mut listener = TcpListener :: bind( "127.0.0.1:8080")。待つ?; loop { let(mut socket、_)= listener.accept()。await?; tokio :: spawn(async move { let mut buf = [0; 1024]; //ループで、ソケットからデータを読み取り、データを書き戻します 。loop { let n = match socket.read(&mut buf).await { //ソケットが閉じている Ok(n)if n == 0 => return、 Ok(n)=> n、 Err(e)=> { eprintln!( "ソケットからの読み取りに失敗しました; err = {:?}"、e); 戻る; } }; // Err(e)= socket.write_all(&buf [0..n])。await { eprintln!( "ソケットへの書き込みに失敗しました; err = {:?}"、e);の場合、データを書き戻します。 戻る; } } }); } }
発表では、Tokioチームは有名なTokioユーザーとケースも紹介しました。例えば、確執が 5倍にテール待ち時間を短縮するために東京を使用しています。Fly.ioは、 簡単に性能要件を満たすために東京を使用して、AWS ラムダ チームは、より信頼性が高く、柔軟なサービスを実現するために東京を使用しています。
1.0重要なバージョンアップデートとして、Tokioチームはその安定性を保証し、Rustエコシステムに安定したインフラストラクチャを提供することを約束しました。Tokioチームは、現在Tokio 2.0の計画はないと述べ、Tokio2.0を少なくとも3年間リリースしないことを約束しました。彼らは、1.0に対して少なくとも5年間の保守サポートを提供することを計画しています。
もちろん、安定性はTokioが停滞していることを意味するわけではありません。Tokioチームは、Stream特性をRust標準ライブラリにプッシュし、io_uringインターフェイスを実装し、トレースを統合し、Tokioの全体的なエコロジーを改善するという将来の作業を紹介しました。ここでのエコロジーは、TokioチームがTokioスタックと呼んでいるものです。たとえば、Tokioは、ソケットやタイマーなどの標準プリミティブ用のランタイムAPIと非同期APIを提供しますが、ネットワークアプリケーションは通常、HTTPやgRPCなどの高レベルのプロトコルを使用します。したがって、Tokioスタックは、需要を満たすためにHTTPHyperとgRPCTonicを提供します。
最後に、Tokioチームは、Tokioの発売に伴い、信頼性の高いクライアントとサーバーを構築するための再利用可能なコンポーネントのセットであるTowerの開発に焦点を当てると述べました。
詳細については、https://tokio.rs/blog/2020-12-tokio-1-0を参照してください。