node.js v16 で QuicTransport 試してみようと思ったら消えてた話
ほうほう。 node.js v15 で QuicTransport が実験的実装されている。ビルド時にフラグを入れないと使えないので、公式の Dockerfile などは使えないから自分でビルドして使えとね。
このあたり参考にして Dockerfile 作ってみるかー。
$ docker run --rm -it debian:buster sh
# apt update
# apt install -y python3 g++ make wget python3-distutils
# cd /tmp
# wget https://nodejs.org/dist/v16.1.0/node-v16.1.0.tar.gz
# tar zxf node-v16.1.0.tar.gz
# cd node-v16.1.0
# ./configure --experimental-quic
Node.js configure: Found Python 3.7.3...
gyp: --experimental-quic not found (cwd: /tmp/node-v16.1.0) while trying to load --experimental-quic
Error running GYP
あんれーおかしいな。フラグがないといわれる。
Quic のドキュメントもあったみたいなんだけど、 v16.1.0 では消えてるなあ。どこで消えたんだろ?
どうやら v15.8.0 で消えた様子だ。 PR は... https://github.com/nodejs/node/pull/37067
なるほど、 OpenSSL にパッチあてて頑張って実装してみたけど、 OpenSSL サイドがちゃんと node.js QUIC のための実装をしてくれるか先行き不透明なので LTS に入れてメンテしていくのは難しくなった。なので一旦実装を削除しました、とのこと。代わりにユーザーランド(=js 実装)で OpenSSL バインディングに依存しない実装を模索してみる、という話になったらしい。
やはり OpenSSL が壁になるんやなってハナシ。実装膨らみすぎてメンテ無限に大変そうだ。
これは Microsoft と Akamai の fork QUIC 対応版。 OpenSSL あたりが良い感じに 3.1 で QUIC を実装してくれるまでの一時的な繋ぎ実装だそう。
サーバ実装はまだ C/C++/Rust がほとんど。ギリ Python と golang, Java がある。自分が触れるのはまあ golang かなあ。
node.js の HTTP/3 実装についてはこの issue でトラックしていくことになったらしい。先週の話。自分は C 実装できんので頑張ってくれ~。
現状だとこの Python ライブラリが一番サーバサイドとして使いやすそうな雰囲気。サンプルコードもちょいちょいある。
PHP で HTTP/2 や gRPC をハンドリング出来る RoadRunner は特にまだ何もしていない様子。 close はされてないから、「Draft 抜けて標準化されたら実装するよー」というステータスに見える。
蛇足:初めてスクラップ使ってみたけど、良好。
- 実際に手を動かした時系列でデータが並んでいく
- 気軽にコメントを追加出来る
記事にするほどの量がない軽度の調査系をこうやってしたためるのが合ってそう。