rustのHTTPライブラリについて情報収集した
はじめに
rustのHTTPライブラリの現状について検索して軽く情報収集したので、 HTTPに関連したIOライブラリも含めてメモしておきます。
非同期IO関連の動向
- RFC: Tokio reform, take 2 by aturon · Pull Request #3 · tokio-rs/tokio-rfcs
- Rustの『RFC 2033: 実験的なコルーチン』の要約メモ
- RFCは2017-06-09にマージされてた。 eRFC: Experimentally add coroutines to Rust by alexcrichton · Pull Request #2033 · rust-lang/rfcs
- alexcrichton/futures-await
- Async/await syntax for Rust and the futures crate
- rust-lang-nursery/futures-rs: Zero-cost futures and streams in Rust
- Zero-cost futures and streams in Rust
HTTPライブラリ
HTTP/2
https://github.com/carllerche/h2
- HTTP/2のクライアントとサーバ実装。
- Tokioベース。
- このライブラリ単体ではHTTP/1.0からのアップグレードやTLSなどはサポートしない。
- hyperがこのライブラリを使うようになることでフル実装になることを目指している。
- 最終コミットは3日前。
- https://github.com/hyperium/hyper/issues/304#issuecomment-357338916
- 16日前にh2のv0.1が出て、今後hyperへの組み込みが始まっていきそう。
https://github.com/mlalic/solicit
- 低レベルのHTTP/2の実装。
- 高レベルの他のライブラリがこのライブラリを使えるようにするという位置づけ。
- 特定のIOライブラリのAPIに依存せず、イベントドリブンなIOライブラリでもブロッキングIOのライブラリを使う場合でも同じAPIを提供するべきとのこと。
- 現時点ではパフォーマンスは主なゴールではない。
- 最終コミットは1年前。
HTTP/1.1
https://github.com/swindon-rs/tk-http/
- Full featured HTTP and Websockets library for rust/tokio
- Status: Beta
- APIは変えずに将来HTTP/2をサポート予定。
- Apache2とMITのデュアルライセンス。
- 最終コミットは19日前。
https://github.com/SergejJurecko/mio_httpc
- mio based async and sync http client
- TLSバックエンドはnative, OpenSSL, rtls (rustls) のどれか1つを選んで使う。
- Chunked encoding uploadとHTTP/2はTODO。
- Apache2とMITのデュアルライセンス。
- 最終コミットは4時間前。
Webフレームワーク
以下の2つの記事を読んだ。各レポジトリを見てみるとその後状況が変わっているところもあったが、結論としてはやはりironが無難そう。
2017-04-29 Comparison of Rust Web Frameworks | WIRED IN
2017-01-20 Performance: Iron vs Nickel « Oliver’s Development Musings
iron/iron: An Extensible, Concurrent Web Framework for Rust
- hyperベース。
- ライセンスはMIT。
- 最終コミットは3か月前。
nickel-org/nickel.rs: An expressjs inspired web framework for Rust
- hyperベース。
- ライセンスはMIT。
- 最終コミットは1か月前。
SergioBenitez/Rocket: A web framework for Rust.
- rustのnightlyが必要。
- hyperベース。
- Apache2とMITのデュアルライセンス。
- 最終コミットは5日前。
- 将来は非同期IOベースに移行予定。 (移行時はAPI変わりそう)
直接関係ないけどついでにメモ
WebやHTTPと関係ないが上の記事でJinja2のテンプレートエンジンのRust実装も紹介されていたのでメモ。 Keats/tera: A template engine for Rust based on Jinja2/Django
あと multi-producer multi-consumer な channel 実装について調べていたら crossbeam-rs/crossbeam-channel についてのredditのスレッドの コメント で https://github.com/stjepang/rfcs-crossbeam/blob/channel/text/2017-11-09-channel.md が紹介されていて読んでみると非常にしっかり書かれていたのでこれもメモ。