bossan 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- data/examples/config.ru +19 -0
- data/ext/bossan/bossan_ext.c +43 -29
- data/lib/bossan/version.rb +1 -1
- data/lib/rack/handler/bossan.rb +3 -2
- metadata +4 -2
data/examples/config.ru
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'bossan'
|
2
|
+
require 'pp'
|
3
|
+
|
4
|
+
class MyApp
|
5
|
+
def call env
|
6
|
+
body = ['hi!']
|
7
|
+
# pp env
|
8
|
+
[
|
9
|
+
200, # Status code
|
10
|
+
{ 'Content-Type' => 'text/html',
|
11
|
+
'Content-Length' => body.join.size.to_s,
|
12
|
+
}, # Reponse headers
|
13
|
+
body # Body of the response
|
14
|
+
]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# Rack::Handler::Bossan.run MyApp.new
|
19
|
+
run MyApp.new
|
data/ext/bossan/bossan_ext.c
CHANGED
@@ -102,6 +102,8 @@ static VALUE i_keys;
|
|
102
102
|
static VALUE i_call;
|
103
103
|
static VALUE i_new;
|
104
104
|
static VALUE i_key;
|
105
|
+
static VALUE i_each;
|
106
|
+
static VALUE i_close;
|
105
107
|
|
106
108
|
static char *server_name = "127.0.0.1";
|
107
109
|
static short server_port = 8000;
|
@@ -668,11 +670,21 @@ close_response(client_t *client)
|
|
668
670
|
client->response_closed = 1;
|
669
671
|
}
|
670
672
|
|
673
|
+
static VALUE
|
674
|
+
collect_body(VALUE i, VALUE str, int argc, VALUE *argv)
|
675
|
+
{
|
676
|
+
if(argc < 1) {
|
677
|
+
return Qnil;
|
678
|
+
}
|
679
|
+
rb_str_concat(str, argv[0]);
|
680
|
+
return Qnil;
|
681
|
+
}
|
682
|
+
|
671
683
|
static inline int
|
672
684
|
processs_write(client_t *client)
|
673
685
|
{
|
674
686
|
VALUE iterator = NULL;
|
675
|
-
VALUE
|
687
|
+
VALUE v_body;
|
676
688
|
VALUE item;
|
677
689
|
char *buf;
|
678
690
|
ssize_t buflen;
|
@@ -687,37 +699,34 @@ processs_write(client_t *client)
|
|
687
699
|
return -1;
|
688
700
|
}
|
689
701
|
|
690
|
-
|
702
|
+
v_body = rb_ary_entry(iterator, 2);
|
691
703
|
|
692
|
-
if
|
704
|
+
if(!rb_respond_to(v_body, i_each)){
|
693
705
|
return -1;
|
694
706
|
}
|
695
707
|
|
696
|
-
|
708
|
+
VALUE v_body_str = rb_str_new2("");
|
709
|
+
rb_block_call(v_body, i_each, 0, NULL, collect_body, v_body_str);
|
710
|
+
if(rb_respond_to(v_body, i_close)) {
|
711
|
+
rb_funcall(v_body, i_close, 0);
|
712
|
+
}
|
697
713
|
|
698
|
-
|
699
|
-
|
700
|
-
if(TYPE(item) != T_STRING) {
|
701
|
-
return -1;
|
702
|
-
}
|
714
|
+
buf = StringValuePtr(v_body_str);
|
715
|
+
buflen = RSTRING_LEN(v_body_str);
|
703
716
|
|
704
|
-
|
705
|
-
|
706
|
-
|
707
|
-
|
708
|
-
|
709
|
-
|
710
|
-
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
client->
|
715
|
-
|
716
|
-
|
717
|
-
if(client->content_length <= client->write_bytes){
|
718
|
-
// all done
|
719
|
-
break;
|
720
|
-
}
|
717
|
+
bucket = new_write_bucket(client->fd, 1);
|
718
|
+
set2bucket(bucket, buf, buflen);
|
719
|
+
ret = writev_bucket(bucket);
|
720
|
+
if(ret <= 0){
|
721
|
+
return ret;
|
722
|
+
}
|
723
|
+
//mark
|
724
|
+
client->write_bytes += buflen;
|
725
|
+
//check write_bytes/content_length
|
726
|
+
if(client->content_length_set){
|
727
|
+
if(client->content_length <= client->write_bytes){
|
728
|
+
// all done
|
729
|
+
/* break; */
|
721
730
|
}
|
722
731
|
}
|
723
732
|
close_response(client);
|
@@ -1521,9 +1530,10 @@ process_rack_app(client_t *cli)
|
|
1521
1530
|
|
1522
1531
|
VALUE* response_ary = RARRAY_PTR(cli->response);
|
1523
1532
|
|
1524
|
-
|
1525
|
-
|
1526
|
-
|
1533
|
+
/* rb_p(cli->response); */
|
1534
|
+
|
1535
|
+
if (TYPE(response_ary[0]) != T_FIXNUM ||
|
1536
|
+
TYPE(response_ary[1]) != T_HASH) {
|
1527
1537
|
return 0;
|
1528
1538
|
}
|
1529
1539
|
|
@@ -1988,6 +1998,8 @@ Init_bossan_ext(void)
|
|
1988
1998
|
rb_gc_register_address(&i_call);
|
1989
1999
|
rb_gc_register_address(&i_new);
|
1990
2000
|
rb_gc_register_address(&i_key);
|
2001
|
+
rb_gc_register_address(&i_each);
|
2002
|
+
rb_gc_register_address(&i_close);
|
1991
2003
|
|
1992
2004
|
rb_gc_register_address(&rack_app); //rack app
|
1993
2005
|
|
@@ -1995,6 +2007,8 @@ Init_bossan_ext(void)
|
|
1995
2007
|
i_call = rb_intern("call");
|
1996
2008
|
i_keys = rb_intern("keys");
|
1997
2009
|
i_key = rb_intern("key?");
|
2010
|
+
i_each = rb_intern("each");
|
2011
|
+
i_close = rb_intern("close");
|
1998
2012
|
|
1999
2013
|
server = rb_define_module("Bossan");
|
2000
2014
|
rb_gc_register_address(&server);
|
data/lib/bossan/version.rb
CHANGED
data/lib/rack/handler/bossan.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
1
2
|
require 'rack/handler'
|
2
3
|
require 'bossan'
|
3
4
|
|
@@ -6,7 +7,7 @@ module Rack
|
|
6
7
|
module Bossan
|
7
8
|
DEFAULT_OPTIONS = {
|
8
9
|
:Host => '127.0.0.1',
|
9
|
-
:Port =>
|
10
|
+
:Port => 8000,
|
10
11
|
# :Verbose => false
|
11
12
|
}
|
12
13
|
|
@@ -20,7 +21,7 @@ module Rack
|
|
20
21
|
def self.valid_options
|
21
22
|
{
|
22
23
|
"Host=HOST" => "Hostname to listen on (default: localhost)",
|
23
|
-
"Port=PORT" => "Port to listen on (default:
|
24
|
+
"Port=PORT" => "Port to listen on (default: 8000)",
|
24
25
|
}
|
25
26
|
end
|
26
27
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bossan
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-12-
|
12
|
+
date: 2012-12-12 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: high performance asynchronous rack web server
|
15
15
|
email:
|
@@ -25,6 +25,7 @@ files:
|
|
25
25
|
- README.md
|
26
26
|
- Rakefile
|
27
27
|
- bossan.gemspec
|
28
|
+
- examples/config.ru
|
28
29
|
- examples/hello.rb
|
29
30
|
- examples/sinatra_app.rb
|
30
31
|
- examples/views/index.haml
|
@@ -66,3 +67,4 @@ signing_key:
|
|
66
67
|
specification_version: 3
|
67
68
|
summary: high performance asynchronous rack web server
|
68
69
|
test_files: []
|
70
|
+
has_rdoc:
|