読者です 読者をやめる 読者になる 読者になる

non vorrei lavorare

ブログ名の通りです。javascript three.js mruby rust OCaml golang julialang blender

http2 ハッカソン #5に行ってきた

おはようございます。週末は長男の自転車の補助輪をとり、練習をはじめました。kjunichiです。
 

初めてのハッカソン

先日の初めての勉強会に参加に続き、初めてのハッカソンに行ってきました。といっても、今回は報告会もあり、HTTP2のプライオリティに関する議論もありの構成でした。

Jxckさん、y_iwanaga_さん、並びにhttp2study関係者の皆様、ありがとうございました。懇親会行けず残念でした。

自分がハッカソンで出来たこと

  • libh2oをhttps化して、mrubyハンドラを有効化して動かす
  • Electronでhttp2を喋らせる

libh2oをhttps化してmrubyハンドラを動かす

example/libh2o/simple.cをベースにhttpsのフラグ有効化し、さらにSSL周りの処理をh2oのmain.cを参考に追加して、FirefoxChromeからオレオレ証明書でアクセス可能にした。

また、先日Rack APIに変更されたmrubyハンドラを有効化した。

use with Gist Search

やってみて分かったこと

現在のlibh2o.aにはmruby関連のもモジュールが含まれていないようで

use with Gist Search

のようにビルドする必要があった。(h2oのソースツリーの最上位にbuildディレクトリを作成し作業)

libh2oのサンプルのHTTPSの処理のままでは、最近のブラウザにはハネられる。

SSL_CTX_set_options(accept_ctx.ssl_ctx, SSL_OP_NO_SSLv2);

setup_ecc_key(accept_ctx.ssl_ctx); // <- この処理をh2oのmain.cより追加

if (USE_MEMCACHED) {

mrubyはmy_mruby_registerなる関数をon_config_mruby_handler_fileを参考に(というか、ほぼそのまま)作ることで対応できた。

ElectronでHTTP2通信する

内部で使われているChromiumはとっくにHTTP2に対応しているのに、いつまでたってもHTTP2でのアクセスが出来ない。

どうも、Electronが使っているChromium content moduleの層ではなく、Chomeの層でHTTP2に対応しているのかもという気が最近して、だったら、node.jsのhttp2モジュールを使って自前でHTTP2通信するしかないのかもということで、今回のハッカソンで実際に

npm install http2

で入れたhttp2モジュールを使ってElectronでhttp2通信出来るか試してみた。

use with Gist Search こちらのコードはハッカソンから帰宅して、続きに取り組み、DOMの生成まで出来るようにしたコード。

やってみて分かったこと

http2モジュールで取得したテキスト文字列をDOMに変換する処理が以前作った処理が流用出来ず、時間切れ。

また、ハッカソンから帰って気がついたが、実際にhttp2モジュールがhttp2で通信しているのか確認出来ていない。Wireshark等でパケットダンプして確認しないと行けないかも。もしくはhttp2オンリーのtrusterdのmruby-http2モジュールのnpnのh2バージョンをh2-16からh2に変更して動かして、これと通信出来るか確認するなど。

まとめ

週末時間作って、もう少し内容追記できたらと思う。

関連記事

1年前の記事