mattn/mruby-uv - GitHub
interface to libuv for mruby(experimental)
https://github.com/mattn/mruby-uv
mattn/mruby-http - GitHubこれを使って
interface to http for mruby(experimental)
https://github.com/mattn/mruby-http
#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 はじまったな!