Trusterd: HTTP/2 Web Server scripting with mrubyのバージョン0.0.1をリリースしました。
Trusterdはmrubyで設定を書けたり、振る舞いをプログラムブルに制御できるHTTP/2用のWebサーバです。まだまだ低機能ですが、ベースの機能が大体できたのでv0.0.1としてリリースしました。
現状の機能としては、
- 設定をmrubyでスクリプティングできる
- Listenアドレス・ポートの指定
- ドキュメントルートの指定
- serverヘッダの指定
- デバッグオプション
- Rubyメソッドでリクエスト・レスポンス情報を操作
- TLSオプションの有無
- 有りの場合はkeyとcrtファイルの指定が必要
- Rubyブロックのコールバックオプション
- 有りの場合リクエスト前と後でRubyブロックのコールバックが可能
- Connection レコード記録の有無
です。
例えば、コールバックオプションを有りにすると現在は二箇所でコールバック可能で、リクエスト処理前のmap_to_storageというタイミングでURIとファイルに紐付けを変更するブロックを指定したり、
[program lang=’ruby’ escaped=’true’]
s.set_map_to_strage_cb { # location setting if s.request.uri == "/index.html" s.request.filename = "#{root_dir}/htdocs/hoge" end }
[/program]
リクエスト処理後のロギングフェーズで、何かログをとったりすることができます。
[program lang=’ruby’ ]
f = File.open "#{root_dir}/logs/access.log", "a" s.set_logging_cb { f.write "#{s.conn.client_ip} #{Time.now} - #{s.r.uri} - #{s.r.filename}¥n" }
[/program]
全体のmrubyで書くconfは以下のようになります。
[program lang=’ruby’ escaped=’true’]
SERVER_NAME = "Trusterd" SERVER_VERSION = "0.0.1" SERVER_DESCRIPTION = "#{SERVER_NAME}/#{SERVER_VERSION}" root_dir = "/usr/local/trusterd" s = HTTP2::Server.new({ # # required config # :port => 8080, :document_root => "#{root_dir}/htdocs", :server_name => SERVER_DESCRIPTION, # required when tls option is true. # tls option is true by default. #:key => "#{root_dir}/ssl/server.key", #:crt => "#{root_dir}/ssl/server.crt", # listen ip address # default value is 0.0.0.0 # :server_host => "127.0.0.1", # # optional config # # debug default: false # :debug => true, # tls default: true :tls => false, # damone default: false # :daemon => true, # callback default: false # :callback => true, # connection_record defualt: true # :connection_record => false, }) # # when :callback option is true, # # s.set_map_to_strage_cb { # # p "callback bloack at set_map_to_strage_cb" # p s.request.uri # p s.request.filename # # # location setting # if s.request.uri == "/index.html" # s.request.filename = "#{root_dir}/htdocs/hoge" # end # p s.request.filename # # # you can use regexp if you link regexp mrbgem. # # Or, you can use KVS like mruby-redis or mruby- # # vedis and so on. # # } # # f = File.open "#{root_dir}/logs/access.log", "a" # # s.set_logging_cb { # # p "callback block after send response" # f.write "#{s.conn.client_ip} #{Time.now} - #{s.r.uri} - #{s.r.filename}¥n" # # } s.run
[/program]
性能も、いつも取っているような単純なhello worldベンチでは僕のCPUコア2・メモリ8GB環境で23万reqest/secぐらいでます。詳しくはこちらを見てみて下さい。
是非、導入方法を見ながら色々遊んでみてください。また、面白いアイデアや機能追加等、随時pull-requestをお待ちしております。