Install Theme

Your web-browser is very outdated, and as such, this website may not display properly. Please consider upgrading to a modern, faster and more secure browser. Click here to do so.

タンブラー?

Big Sky

4月 26 '12

mruby でWebサーバ動いた

ここ数日、mrubyの拡張を書いてた訳ですが。
mattn/mruby-uv - GitHub

interface to libuv for mruby(experimental)

http://bit.ly/IiWN7X
mattn/mruby-http - GitHub

interface to http for mruby(experimental)

http://bit.ly/IiWN80
これを使って
#include <mruby/proc.h>
#include <mruby/data.h>
#include <compile.h>
#include <mrb_uv.h>
#include <mrb_http.h>

#define _(…) #__VA_ARGS__ \n

int
main()
{
  int n;
  mrb_state* mrb;
  struct mrb_parser_state* st;
  char* code =
 _(
)_( require ‘UV’
)_( require ‘HTTP’
)_(
)_( s = UV::TCP.new()
)_( s.bind(UV::ip4_addr(‘127.0.0.1’, 8888))
)_( cl = []
)_( s.listen(5) {|x|
)_(   return if x != 0
)_(   c = s.accept()
)_(   cl « c
)_(   c.read_start {|b|
)_(     r = HTTP::parse_http_request(b)
)_(     c.write(“HTTP/1.1 200 OK\r\nHost: example.com\r\n\r\nhello #{r[‘PATH_INFO’]}”) {|x|
)_(       c.close()
)_(     }
)_(   }
)_( }
)_( UV::run()
);

  mrb = mrb_open();
  mrb_uv_init(mrb);
  mrb_http_init(mrb);
  st = mrb_parse_string(mrb, code);
  n = mrb_generate_code(mrb, st->tree);
  mrb_pool_close(st->pool);
  mrb_run(mrb, mrb_proc_new(mrb, mrb->irep[n]), mrb_nil_value());
  return 0;
}
こんなのが動く様になりました。これでデバイス上で、しかもrubyによるWebサーバが動く日も遠くなくなりました。便器にJSONRPCを送ってウォシュレットが動く!なんて事も夢では無くなって来ましたね!

mruby はじまったな!

from Big Sky http://bit.ly/IiWN81

3 リアクション

  1. albidamattnからリブログしました
  2. delank32ruからリブログしました
  3. k32rumattnからリブログしました
  4. mattnの投稿です