rainbows 3.0.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.wrongdoc.yml +2 -2
- data/Documentation/comparison.haml +6 -6
- data/GIT-VERSION-GEN +1 -1
- data/GNUmakefile +16 -128
- data/README +2 -3
- data/Rakefile +3 -3
- data/examples/reverse_proxy.ru +9 -0
- data/lib/rainbows.rb +14 -6
- data/lib/rainbows/base.rb +0 -1
- data/lib/rainbows/const.rb +1 -10
- data/lib/rainbows/coolio/client.rb +8 -4
- data/lib/rainbows/coolio/core.rb +0 -3
- data/lib/rainbows/coolio/thread_client.rb +2 -2
- data/lib/rainbows/coolio_fiber_spawn.rb +6 -6
- data/lib/rainbows/dev_fd_response.rb +16 -9
- data/lib/rainbows/epoll.rb +43 -0
- data/lib/rainbows/epoll/client.rb +232 -0
- data/lib/rainbows/epoll/response_chunk_pipe.rb +18 -0
- data/lib/rainbows/epoll/response_pipe.rb +32 -0
- data/lib/rainbows/epoll/server.rb +31 -0
- data/lib/rainbows/error.rb +1 -9
- data/lib/rainbows/ev_core.rb +12 -12
- data/lib/rainbows/ev_core/cap_input.rb +1 -1
- data/lib/rainbows/event_machine.rb +0 -6
- data/lib/rainbows/event_machine/client.rb +3 -3
- data/lib/rainbows/event_machine/response_chunk_pipe.rb +5 -7
- data/lib/rainbows/event_machine/response_pipe.rb +7 -8
- data/lib/rainbows/fiber/base.rb +2 -2
- data/lib/rainbows/fiber/io.rb +21 -63
- data/lib/rainbows/fiber/io/methods.rb +1 -1
- data/lib/rainbows/http_server.rb +4 -4
- data/lib/rainbows/join_threads.rb +18 -0
- data/lib/rainbows/max_body.rb +2 -1
- data/lib/rainbows/max_body/wrapper.rb +1 -1
- data/lib/rainbows/never_block/event_machine.rb +2 -2
- data/lib/rainbows/process_client.rb +9 -1
- data/lib/rainbows/queue_pool.rb +2 -2
- data/lib/rainbows/response.rb +1 -1
- data/lib/rainbows/rev_fiber_spawn.rb +4 -4
- data/lib/rainbows/revactor/client.rb +4 -5
- data/lib/rainbows/revactor/proxy.rb +1 -1
- data/lib/rainbows/reverse_proxy.rb +189 -0
- data/lib/rainbows/reverse_proxy/coolio.rb +61 -0
- data/lib/rainbows/reverse_proxy/ev_client.rb +39 -0
- data/lib/rainbows/reverse_proxy/event_machine.rb +46 -0
- data/lib/rainbows/reverse_proxy/multi_thread.rb +7 -0
- data/lib/rainbows/reverse_proxy/synchronous.rb +21 -0
- data/lib/rainbows/sendfile.rb +1 -1
- data/lib/rainbows/sync_close.rb +2 -2
- data/lib/rainbows/thread_pool.rb +1 -1
- data/lib/rainbows/writer_thread_pool.rb +1 -1
- data/lib/rainbows/xepoll.rb +24 -0
- data/lib/rainbows/xepoll/client.rb +45 -0
- data/pkg.mk +171 -0
- data/rainbows.gemspec +2 -4
- data/t/GNUmakefile +4 -0
- data/t/bin/content-md5-put +1 -0
- data/t/kgio-pipe-response.ru +9 -1
- data/t/rack-fiber_pool/app.ru +6 -1
- data/t/simple-http_Epoll.ru +9 -0
- data/t/simple-http_XEpoll.ru +9 -0
- data/t/t0014-config-conflict.sh +5 -3
- data/t/t0023-sendfile-byte-range.sh +1 -7
- data/t/t0034-pipelined-pipe-response.sh +2 -1
- data/t/t0035-kgio-pipe-response.sh +0 -7
- data/t/t0041-optional-pool-size.sh +51 -0
- data/t/t0050-response-body-close-has-env.sh +2 -1
- data/t/t0104-rack-input-limit-tiny.sh +6 -4
- data/t/t0105-rack-input-limit-bigger.sh +6 -4
- data/t/t0106-rack-input-keepalive.sh +2 -0
- data/t/t0107-rack-input-limit-zero.sh +60 -0
- data/t/t0113-rewindable-input-false.sh +1 -0
- data/t/t0114-rewindable-input-true.sh +1 -0
- data/t/t0202-async-response-one-oh.sh +56 -0
- data/t/test_isolate.rb +5 -2
- metadata +42 -37
- data/lib/rainbows/rack_input.rb +0 -17
data/.wrongdoc.yml
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
---
|
2
|
-
cgit_url: http://
|
3
|
-
git_url: git://
|
2
|
+
cgit_url: http://bogomips.org/rainbows.git
|
3
|
+
git_url: git://bogomips.org/rainbows.git
|
4
4
|
rdoc_url: http://rainbows.rubyforge.org/
|
5
5
|
changelog_start: v0.97.0
|
6
6
|
merge_html:
|
@@ -278,14 +278,14 @@
|
|
278
278
|
%td.app_pool Yes
|
279
279
|
%td.lock No!
|
280
280
|
%td.async Revactor itself
|
281
|
-
%td.ws
|
281
|
+
%td.ws no
|
282
282
|
%tr.comp_row
|
283
283
|
%td.mod ThreadPool
|
284
284
|
%td.devfd Yes
|
285
285
|
%td.app_pool Yes
|
286
286
|
%td.lock Yes
|
287
287
|
%td.async standard Ruby
|
288
|
-
%td.ws
|
288
|
+
%td.ws no
|
289
289
|
%tr.comp_row
|
290
290
|
%td.mod Coolio
|
291
291
|
%td.devfd Yes
|
@@ -299,7 +299,7 @@
|
|
299
299
|
%td.app_pool Yes
|
300
300
|
%td.lock Yes
|
301
301
|
%td.async standard Ruby
|
302
|
-
%td.ws
|
302
|
+
%td.ws no
|
303
303
|
%tr.comp_row
|
304
304
|
%td.mod EventMachine
|
305
305
|
%td.devfd Yes
|
@@ -320,21 +320,21 @@
|
|
320
320
|
%td.app_pool Yes
|
321
321
|
%td.lock No!
|
322
322
|
%td.async Rainbows::Fiber::IO, Rainbows.sleep
|
323
|
-
%td.ws
|
323
|
+
%td.ws no
|
324
324
|
%tr.comp_row
|
325
325
|
%td.mod FiberPool
|
326
326
|
%td.devfd Yes
|
327
327
|
%td.app_pool Yes
|
328
328
|
%td.lock No!
|
329
329
|
%td.async Rainbows::Fiber::IO, Rainbows.sleep
|
330
|
-
%td.ws
|
330
|
+
%td.ws no
|
331
331
|
%tr.comp_row
|
332
332
|
%td.mod ActorSpawn
|
333
333
|
%td.devfd no-op
|
334
334
|
%td.app_pool Yes
|
335
335
|
%td.lock Yes
|
336
336
|
%td.async standard Ruby
|
337
|
-
%td.ws
|
337
|
+
%td.ws no
|
338
338
|
%tr.comp_row
|
339
339
|
%td.mod NeverBlock
|
340
340
|
%td.devfd Yes
|
data/GIT-VERSION-GEN
CHANGED
data/GNUmakefile
CHANGED
@@ -1,18 +1,20 @@
|
|
1
1
|
# use GNU Make to run tests in parallel, and without depending on RubyGems
|
2
2
|
all::
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
RSYNC = rsync
|
3
|
+
RSYNC_DEST := rubyforge.org:/var/www/gforge-projects/rainbows
|
4
|
+
rfproject := rainbows
|
5
|
+
rfpackage := rainbows
|
7
6
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
-
|
12
|
-
|
13
|
-
|
7
|
+
man-rdoc: man html
|
8
|
+
$(MAKE) -C Documentation comparison.html
|
9
|
+
for i in $(man1_rdoc); do echo > $$i; done
|
10
|
+
doc:: man-rdoc
|
11
|
+
include pkg.mk
|
12
|
+
ifneq ($(VERSION),)
|
13
|
+
release::
|
14
|
+
$(RAKE) raa_update VERSION=$(VERSION)
|
15
|
+
$(RAKE) publish_news VERSION=$(VERSION)
|
16
|
+
$(RAKE) fm_update VERSION=$(VERSION)
|
14
17
|
endif
|
15
|
-
RUBY_ENGINE := $(shell $(RUBY) -e 'puts((RUBY_ENGINE rescue "ruby"))')
|
16
18
|
|
17
19
|
base_bins := rainbows
|
18
20
|
bins := $(addprefix bin/, $(base_bins))
|
@@ -20,134 +22,20 @@ man1_rdoc := $(addsuffix _1, $(base_bins))
|
|
20
22
|
man1_bins := $(addsuffix .1, $(base_bins))
|
21
23
|
man1_paths := $(addprefix man/man1/, $(man1_bins))
|
22
24
|
|
23
|
-
install: $(bins)
|
24
|
-
$(prep_setup_rb)
|
25
|
-
$(RM) -r .install-tmp
|
26
|
-
mkdir .install-tmp
|
27
|
-
cp -p bin/* .install-tmp
|
28
|
-
$(RUBY) setup.rb all
|
29
|
-
$(RM) $^
|
30
|
-
mv .install-tmp/* bin/
|
31
|
-
$(RM) -r .install-tmp
|
32
|
-
$(prep_setup_rb)
|
33
|
-
|
34
|
-
setup_rb_files := .config InstalledFiles
|
35
|
-
prep_setup_rb := @-$(RM) $(setup_rb_files);$(MAKE) -C $(ext) clean
|
36
|
-
|
37
25
|
clean:
|
38
|
-
-$(MAKE) -C $(ext) clean
|
39
26
|
-$(MAKE) -C Documentation clean
|
40
|
-
$(RM) $(setup_rb_files) $(t_log)
|
41
27
|
|
42
28
|
man html:
|
43
29
|
$(MAKE) -C Documentation install-$@
|
44
30
|
|
45
|
-
pkg_extra
|
46
|
-
|
47
|
-
ChangeLog: GIT-VERSION-FILE .wrongdoc.yml
|
48
|
-
wrongdoc prepare
|
49
|
-
|
50
|
-
manifest: ChangeLog GIT-VERSION-FILE
|
51
|
-
$(RM) -f .manifest
|
52
|
-
$(MAKE) .manifest
|
53
|
-
|
54
|
-
.manifest:
|
55
|
-
(git ls-files && for i in $@ $(pkg_extra) ; do echo $$i; done) | \
|
56
|
-
LC_ALL=C sort > $@+
|
57
|
-
cmp $@+ $@ || mv $@+ $@
|
58
|
-
$(RM) $@+
|
31
|
+
pkg_extra += $(man1_paths)
|
59
32
|
|
60
|
-
doc
|
61
|
-
$(MAKE) -C Documentation comparison.html
|
62
|
-
for i in $(man1_rdoc); do echo > $$i; done
|
63
|
-
find bin lib -type f -name '*.rbc' -exec rm -f '{}' ';'
|
64
|
-
$(RM) -r doc
|
65
|
-
wrongdoc all
|
66
|
-
install -m644 COPYING doc/COPYING
|
67
|
-
install -m644 $(shell grep '^[A-Z]' .document) doc/
|
68
|
-
install -m644 $(man1_paths) doc/
|
33
|
+
doc::
|
69
34
|
cat Documentation/comparison.css >> doc/rdoc.css
|
70
35
|
$(RM) $(man1_rdoc)
|
71
36
|
|
72
|
-
publish_doc:
|
73
|
-
-git set-file-times
|
74
|
-
$(MAKE) doc
|
75
|
-
-find doc/images -type f | \
|
76
|
-
TZ=UTC xargs touch -d '1970-01-01 00:00:02' doc/rdoc.css
|
77
|
-
chmod 644 $$(find doc -type f)
|
78
|
-
$(RSYNC) -av doc/ rubyforge.org:/var/www/gforge-projects/rainbows/
|
79
|
-
git ls-files | xargs touch
|
80
|
-
|
81
|
-
ifneq ($(VERSION),)
|
82
|
-
rfproject := rainbows
|
83
|
-
rfpackage := rainbows
|
84
|
-
pkggem := pkg/$(rfpackage)-$(VERSION).gem
|
85
|
-
pkgtgz := pkg/$(rfpackage)-$(VERSION).tgz
|
86
|
-
release_notes := release_notes-$(VERSION)
|
87
|
-
release_changes := release_changes-$(VERSION)
|
88
|
-
|
89
|
-
release-notes: $(release_notes)
|
90
|
-
release-changes: $(release_changes)
|
91
|
-
$(release_changes):
|
92
|
-
wrongdoc release_changes > $@+
|
93
|
-
$(VISUAL) $@+ && test -s $@+ && mv $@+ $@
|
94
|
-
$(release_notes):
|
95
|
-
wrongdoc release_notes > $@+
|
96
|
-
$(VISUAL) $@+ && test -s $@+ && mv $@+ $@
|
97
|
-
|
98
|
-
# ensures we're actually on the tagged $(VERSION), only used for release
|
99
|
-
verify:
|
100
|
-
test x"$(shell umask)" = x0022
|
101
|
-
git rev-parse --verify refs/tags/v$(VERSION)^{}
|
102
|
-
git diff-index --quiet HEAD^0
|
103
|
-
test `git rev-parse --verify HEAD^0` = \
|
104
|
-
`git rev-parse --verify refs/tags/v$(VERSION)^{}`
|
105
|
-
|
106
|
-
fix-perms:
|
107
|
-
-git ls-tree -r HEAD | awk '/^100644 / {print $$NF}' | xargs chmod 644
|
108
|
-
-git ls-tree -r HEAD | awk '/^100755 / {print $$NF}' | xargs chmod 755
|
109
|
-
|
110
|
-
gem: $(pkggem)
|
111
|
-
|
112
|
-
install-gem: $(pkggem)
|
113
|
-
gem install $(CURDIR)/$<
|
114
|
-
|
115
|
-
$(pkggem): manifest fix-perms
|
116
|
-
gem build $(rfpackage).gemspec
|
117
|
-
mkdir -p pkg
|
118
|
-
mv $(@F) $@
|
119
|
-
|
120
|
-
$(pkgtgz): distdir = $(basename $@)
|
121
|
-
$(pkgtgz): HEAD = v$(VERSION)
|
122
|
-
$(pkgtgz): manifest fix-perms
|
123
|
-
@test -n "$(distdir)"
|
124
|
-
$(RM) -r $(distdir)
|
125
|
-
mkdir -p $(distdir)
|
126
|
-
tar cf - $$(cat .manifest) | (cd $(distdir) && tar xf -)
|
127
|
-
cd pkg && tar cf - $(basename $(@F)) | gzip -9 > $(@F)+
|
128
|
-
mv $@+ $@
|
129
|
-
|
130
|
-
package: $(pkgtgz) $(pkggem)
|
131
|
-
|
132
|
-
release: verify package $(release_notes) $(release_changes)
|
133
|
-
# make tgz release on RubyForge
|
134
|
-
rubyforge add_release -f -n $(release_notes) -a $(release_changes) \
|
135
|
-
$(rfproject) $(rfpackage) $(VERSION) $(pkgtgz)
|
136
|
-
# push gem to RubyGems.org
|
137
|
-
gem push $(pkggem)
|
138
|
-
# in case of gem downloads from RubyForge releases page
|
139
|
-
-rubyforge add_file \
|
140
|
-
$(rfproject) $(rfpackage) $(VERSION) $(pkggem)
|
141
|
-
$(RAKE) raa_update VERSION=$(VERSION)
|
142
|
-
$(RAKE) fm_update VERSION=$(VERSION)
|
143
|
-
$(RAKE) publish_news VERSION=$(VERSION)
|
144
|
-
else
|
145
|
-
gem install-gem: GIT-VERSION-FILE
|
146
|
-
$(MAKE) $@ VERSION=$(GIT_VERSION)
|
147
|
-
endif
|
148
|
-
|
149
37
|
all:: test
|
150
38
|
test:
|
151
39
|
$(MAKE) -C t
|
152
40
|
|
153
|
-
.PHONY:
|
41
|
+
.PHONY: man html
|
data/README
CHANGED
@@ -69,7 +69,6 @@ network concurrency.
|
|
69
69
|
|
70
70
|
\Rainbows! is mainly designed for the odd things Unicorn sucks at:
|
71
71
|
|
72
|
-
* Web Sockets (via {Sunshowers}[http://rainbows.rubyforge.org/sunshowers/])
|
73
72
|
* 3rd-party APIs (to services outside your control/LAN)
|
74
73
|
* OpenID consumers (to providers outside your control/LAN)
|
75
74
|
* Reverse proxy implementations with editing/censoring
|
@@ -142,13 +141,13 @@ for more details.
|
|
142
141
|
You can get the latest source via git from the following locations
|
143
142
|
(these versions may not be stable):
|
144
143
|
|
145
|
-
git://
|
144
|
+
git://bogomips.org/rainbows.git
|
146
145
|
git://repo.or.cz/rainbows.git (mirror)
|
147
146
|
|
148
147
|
You may browse the code from the web and download the latest snapshot
|
149
148
|
tarballs here:
|
150
149
|
|
151
|
-
* http://
|
150
|
+
* http://bogomips.org/rainbows.git (cgit)
|
152
151
|
* http://repo.or.cz/w/rainbows.git (gitweb)
|
153
152
|
|
154
153
|
Inline patches (from "git format-patch") to the mailing list are
|
data/Rakefile
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
# -*- encoding: binary -*-
|
2
2
|
autoload :Gem, 'rubygems'
|
3
3
|
autoload :Tempfile, 'tempfile'
|
4
|
+
require 'wrongdoc'
|
4
5
|
|
5
|
-
|
6
|
-
|
7
|
-
git_url = 'git://git.bogomips.org/rainbows.git'
|
6
|
+
cgit_url = Wrongdoc.config[:cgit_url]
|
7
|
+
git_url = Wrongdoc.config[:git_url]
|
8
8
|
|
9
9
|
desc "read news article from STDIN and post to rubyforge"
|
10
10
|
task :publish_news do
|
data/lib/rainbows.rb
CHANGED
@@ -9,12 +9,15 @@ Unicorn::SocketHelper::DEFAULTS.merge!({
|
|
9
9
|
# write(headers)-write(body)-read
|
10
10
|
# because we always write headers and bodies with two calls
|
11
11
|
:tcp_nodelay => true,
|
12
|
+
|
13
|
+
# we always want to send our headers out ASAP since Rainbows!
|
14
|
+
# is designed for apps that could trickle out the body slowly
|
15
|
+
:tcp_nopush => false,
|
12
16
|
})
|
13
17
|
|
14
18
|
module Rainbows
|
15
19
|
|
16
20
|
O = {} # :nodoc:
|
17
|
-
class Response416 < RangeError; end
|
18
21
|
|
19
22
|
# map of numeric file descriptors to IO objects to avoid using IO.new
|
20
23
|
# and potentially causing race conditions when using /dev/fd/
|
@@ -26,7 +29,6 @@ module Rainbows
|
|
26
29
|
require 'rainbows/const'
|
27
30
|
require 'rainbows/http_parser'
|
28
31
|
require 'rainbows/http_server'
|
29
|
-
autoload :RackInput, 'rainbows/rack_input'
|
30
32
|
autoload :Response, 'rainbows/response'
|
31
33
|
autoload :ProcessClient, 'rainbows/process_client'
|
32
34
|
autoload :Client, 'rainbows/client'
|
@@ -96,10 +98,12 @@ module Rainbows
|
|
96
98
|
end
|
97
99
|
|
98
100
|
def self.quit!
|
99
|
-
@
|
100
|
-
|
101
|
-
|
102
|
-
|
101
|
+
unless @expire
|
102
|
+
@alive = false
|
103
|
+
Rainbows::HttpParser.quit
|
104
|
+
@expire = Time.now + (@server.timeout * 2.0)
|
105
|
+
@server.class.const_get(:LISTENERS).map! { |s| s.close rescue nil }.clear
|
106
|
+
end
|
103
107
|
false
|
104
108
|
end
|
105
109
|
|
@@ -121,6 +125,8 @@ module Rainbows
|
|
121
125
|
:CoolioThreadSpawn => 50,
|
122
126
|
:CoolioThreadPool => 50,
|
123
127
|
:CoolioFiberSpawn => 50,
|
128
|
+
:Epoll => 50,
|
129
|
+
:XEpoll => 50,
|
124
130
|
:EventMachine => 50,
|
125
131
|
:FiberSpawn => 50,
|
126
132
|
:FiberPool => 50,
|
@@ -137,6 +143,8 @@ module Rainbows
|
|
137
143
|
autoload :ThreadTimeout, 'rainbows/thread_timeout'
|
138
144
|
autoload :WorkerYield, 'rainbows/worker_yield'
|
139
145
|
autoload :SyncClose, 'rainbows/sync_close'
|
146
|
+
autoload :ReverseProxy, 'rainbows/reverse_proxy'
|
147
|
+
autoload :JoinThreads, 'rainbows/join_threads'
|
140
148
|
end
|
141
149
|
|
142
150
|
require 'rainbows/error'
|
data/lib/rainbows/base.rb
CHANGED
data/lib/rainbows/const.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
# :enddoc:
|
3
3
|
module Rainbows::Const
|
4
4
|
|
5
|
-
RAINBOWS_VERSION = '3.
|
5
|
+
RAINBOWS_VERSION = '3.1.0'
|
6
6
|
|
7
7
|
include Unicorn::Const
|
8
8
|
|
@@ -14,15 +14,6 @@ module Rainbows::Const
|
|
14
14
|
# "rainbows.autochunk" => false,
|
15
15
|
})
|
16
16
|
|
17
|
-
# client IO object that supports reading and writing directly
|
18
|
-
# without filtering it through the HTTP chunk parser.
|
19
|
-
# Maybe we can get this renamed to "rack.io" if it becomes part
|
20
|
-
# of the official spec, but for now it is "hack.io"
|
21
|
-
CLIENT_IO = "hack.io".freeze
|
22
|
-
|
23
|
-
ERROR_413_RESPONSE = "HTTP/1.1 413 Request Entity Too Large\r\n\r\n"
|
24
|
-
ERROR_416_RESPONSE = "HTTP/1.1 416 Requested Range Not Satisfiable\r\n\r\n"
|
25
|
-
|
26
17
|
RACK_INPUT = Unicorn::HttpRequest::RACK_INPUT
|
27
18
|
REMOTE_ADDR = Unicorn::HttpRequest::REMOTE_ADDR
|
28
19
|
end
|
@@ -2,6 +2,7 @@
|
|
2
2
|
# :enddoc:
|
3
3
|
class Rainbows::Coolio::Client < Coolio::IO
|
4
4
|
include Rainbows::EvCore
|
5
|
+
APP = Rainbows.server.app
|
5
6
|
CONN = Rainbows::Coolio::CONN
|
6
7
|
KATO = Rainbows::Coolio::KATO
|
7
8
|
LOOP = Coolio::Loop.default
|
@@ -44,7 +45,7 @@ class Rainbows::Coolio::Client < Coolio::IO
|
|
44
45
|
end
|
45
46
|
|
46
47
|
def on_readable
|
47
|
-
buf = @_io.kgio_tryread(16384)
|
48
|
+
buf = @_io.kgio_tryread(16384, RBUF)
|
48
49
|
case buf
|
49
50
|
when :wait_readable
|
50
51
|
when nil # eof
|
@@ -105,10 +106,10 @@ class Rainbows::Coolio::Client < Coolio::IO
|
|
105
106
|
@state = :headers
|
106
107
|
end
|
107
108
|
|
108
|
-
def app_call
|
109
|
+
def app_call input
|
109
110
|
KATO.delete(self)
|
110
111
|
disable if enabled?
|
111
|
-
@env[RACK_INPUT] =
|
112
|
+
@env[RACK_INPUT] = input
|
112
113
|
@env[REMOTE_ADDR] = @_io.kgio_addr
|
113
114
|
@env[ASYNC_CALLBACK] = method(:write_async_response)
|
114
115
|
status, headers, body = catch(:async) {
|
@@ -136,12 +137,15 @@ class Rainbows::Coolio::Client < Coolio::IO
|
|
136
137
|
close if @_write_buffer.empty?
|
137
138
|
when :headers
|
138
139
|
if @buf.empty?
|
140
|
+
buf = @_io.kgio_tryread(16384, RBUF) or return close
|
141
|
+
String === buf and return on_read(buf)
|
142
|
+
# buf == :wait_readable
|
139
143
|
unless enabled?
|
140
144
|
enable
|
141
145
|
KATO[self] = Time.now
|
142
146
|
end
|
143
147
|
else
|
144
|
-
on_read(
|
148
|
+
on_read(Z)
|
145
149
|
end
|
146
150
|
end
|
147
151
|
rescue => e
|
data/lib/rainbows/coolio/core.rb
CHANGED
@@ -7,14 +7,11 @@ module Rainbows::Coolio::Core
|
|
7
7
|
# for connections and doesn't die until the parent dies (or is
|
8
8
|
# given a INT, QUIT, or TERM signal)
|
9
9
|
def worker_loop(worker)
|
10
|
-
Rainbows::Response.setup(Rainbows::Coolio::Client)
|
11
10
|
init_worker_process(worker)
|
12
11
|
mod = Rainbows.const_get(@use)
|
13
12
|
rloop = Rainbows::Coolio::Server.const_set(:LOOP, Coolio::Loop.default)
|
14
13
|
Rainbows::Coolio::Server.const_set(:MAX, @worker_connections)
|
15
14
|
Rainbows::Coolio::Server.const_set(:CL, mod.const_get(:Client))
|
16
|
-
Rainbows::EvCore.const_set(:APP, Rainbows.server.app)
|
17
|
-
Rainbows::EvCore.setup
|
18
15
|
Rainbows::Coolio::Heartbeat.new(1, true).attach(rloop)
|
19
16
|
LISTENERS.map! { |s| Rainbows::Coolio::Server.new(s).attach(rloop) }
|
20
17
|
rloop.run
|
@@ -5,10 +5,10 @@ RUBY_VERSION =~ %r{\A1\.8} and
|
|
5
5
|
warn "Coolio and Threads do not mix well under Ruby 1.8"
|
6
6
|
|
7
7
|
class Rainbows::Coolio::ThreadClient < Rainbows::Coolio::Client
|
8
|
-
def app_call
|
8
|
+
def app_call input
|
9
9
|
KATO.delete(self)
|
10
10
|
disable if enabled?
|
11
|
-
@env[RACK_INPUT] =
|
11
|
+
@env[RACK_INPUT] = input
|
12
12
|
app_dispatch # must be implemented by subclass
|
13
13
|
end
|
14
14
|
|