rhebok 0.0.1

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 719ddc3e45ee3486540633fc10e5f28923af2c1e
4
+ data.tar.gz: dfc5be28b80938ec4c03f2cc3f3596be295adf2a
5
+ SHA512:
6
+ metadata.gz: c4fe22f07722f99782eb0c49f2b2640fc6b36a715af19f9d899c23c2fcdf9372b2381c94211c86bdffdbbd1edaabf7a832ee5619a73c9e94836ed4393d7d29ba
7
+ data.tar.gz: 6fb7a0f540491b9d3dae0b32e9494e0a81e6ad8fb784991d808e9c693a35ef0ecab7646ff3b7c8badb37f0ae9adf8a2eec08a0156dc3cf0b8522e816b2688204
data/.gitignore ADDED
@@ -0,0 +1,15 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
15
+ *~
data/.gitmodules ADDED
@@ -0,0 +1,3 @@
1
+ [submodule "ext/rhebok/picohttpparser"]
2
+ path = ext/rhebok/picohttpparser
3
+ url = https://github.com/h2o/picohttpparser.git
data/.travis.yml ADDED
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ install:
3
+ - git submodule update --init --recursive
4
+ - gem install bacon
5
+ - bundle install --jobs=3 --retry=3
6
+ rvm:
7
+ - 2.0.0
8
+ - 2.1.5
data/Changes ADDED
@@ -0,0 +1,4 @@
1
+ 0.0.1 2014-12-18T12:15:52Z
2
+
3
+ - first release
4
+
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in rhebok.gemspec
4
+ gemspec
5
+ gem "rake-compiler"
data/LICENSE.txt ADDED
@@ -0,0 +1,378 @@
1
+ This software is copyright (c) 2014 by Masahiro Nagano <kazeburo@gmail.com>.
2
+
3
+ This is free software; you can redistribute it and/or modify it under
4
+ the same terms as the Perl 5 programming language system itself.
5
+
6
+ Terms of the Perl programming language system itself
7
+
8
+ a) the GNU General Public License as published by the Free
9
+ Software Foundation; either version 1, or (at your option) any
10
+ later version, or
11
+ b) the "Artistic License"
12
+
13
+ --- The GNU General Public License, Version 1, February 1989 ---
14
+
15
+ This software is Copyright (c) 2014 by Masahiro Nagano <kazeburo@gmail.com>.
16
+
17
+ This is free software, licensed under:
18
+
19
+ The GNU General Public License, Version 1, February 1989
20
+
21
+ GNU GENERAL PUBLIC LICENSE
22
+ Version 1, February 1989
23
+
24
+ Copyright (C) 1989 Free Software Foundation, Inc.
25
+ 51 Franklin St, Suite 500, Boston, MA 02110-1335 USA
26
+
27
+ Everyone is permitted to copy and distribute verbatim copies
28
+ of this license document, but changing it is not allowed.
29
+
30
+ Preamble
31
+
32
+ The license agreements of most software companies try to keep users
33
+ at the mercy of those companies. By contrast, our General Public
34
+ License is intended to guarantee your freedom to share and change free
35
+ software--to make sure the software is free for all its users. The
36
+ General Public License applies to the Free Software Foundation's
37
+ software and to any other program whose authors commit to using it.
38
+ You can use it for your programs, too.
39
+
40
+ When we speak of free software, we are referring to freedom, not
41
+ price. Specifically, the General Public License is designed to make
42
+ sure that you have the freedom to give away or sell copies of free
43
+ software, that you receive source code or can get it if you want it,
44
+ that you can change the software or use pieces of it in new free
45
+ programs; and that you know you can do these things.
46
+
47
+ To protect your rights, we need to make restrictions that forbid
48
+ anyone to deny you these rights or to ask you to surrender the rights.
49
+ These restrictions translate to certain responsibilities for you if you
50
+ distribute copies of the software, or if you modify it.
51
+
52
+ For example, if you distribute copies of a such a program, whether
53
+ gratis or for a fee, you must give the recipients all the rights that
54
+ you have. You must make sure that they, too, receive or can get the
55
+ source code. And you must tell them their rights.
56
+
57
+ We protect your rights with two steps: (1) copyright the software, and
58
+ (2) offer you this license which gives you legal permission to copy,
59
+ distribute and/or modify the software.
60
+
61
+ Also, for each author's protection and ours, we want to make certain
62
+ that everyone understands that there is no warranty for this free
63
+ software. If the software is modified by someone else and passed on, we
64
+ want its recipients to know that what they have is not the original, so
65
+ that any problems introduced by others will not reflect on the original
66
+ authors' reputations.
67
+
68
+ The precise terms and conditions for copying, distribution and
69
+ modification follow.
70
+
71
+ GNU GENERAL PUBLIC LICENSE
72
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
73
+
74
+ 0. This License Agreement applies to any program or other work which
75
+ contains a notice placed by the copyright holder saying it may be
76
+ distributed under the terms of this General Public License. The
77
+ "Program", below, refers to any such program or work, and a "work based
78
+ on the Program" means either the Program or any work containing the
79
+ Program or a portion of it, either verbatim or with modifications. Each
80
+ licensee is addressed as "you".
81
+
82
+ 1. You may copy and distribute verbatim copies of the Program's source
83
+ code as you receive it, in any medium, provided that you conspicuously and
84
+ appropriately publish on each copy an appropriate copyright notice and
85
+ disclaimer of warranty; keep intact all the notices that refer to this
86
+ General Public License and to the absence of any warranty; and give any
87
+ other recipients of the Program a copy of this General Public License
88
+ along with the Program. You may charge a fee for the physical act of
89
+ transferring a copy.
90
+
91
+ 2. You may modify your copy or copies of the Program or any portion of
92
+ it, and copy and distribute such modifications under the terms of Paragraph
93
+ 1 above, provided that you also do the following:
94
+
95
+ a) cause the modified files to carry prominent notices stating that
96
+ you changed the files and the date of any change; and
97
+
98
+ b) cause the whole of any work that you distribute or publish, that
99
+ in whole or in part contains the Program or any part thereof, either
100
+ with or without modifications, to be licensed at no charge to all
101
+ third parties under the terms of this General Public License (except
102
+ that you may choose to grant warranty protection to some or all
103
+ third parties, at your option).
104
+
105
+ c) If the modified program normally reads commands interactively when
106
+ run, you must cause it, when started running for such interactive use
107
+ in the simplest and most usual way, to print or display an
108
+ announcement including an appropriate copyright notice and a notice
109
+ that there is no warranty (or else, saying that you provide a
110
+ warranty) and that users may redistribute the program under these
111
+ conditions, and telling the user how to view a copy of this General
112
+ Public License.
113
+
114
+ d) You may charge a fee for the physical act of transferring a
115
+ copy, and you may at your option offer warranty protection in
116
+ exchange for a fee.
117
+
118
+ Mere aggregation of another independent work with the Program (or its
119
+ derivative) on a volume of a storage or distribution medium does not bring
120
+ the other work under the scope of these terms.
121
+
122
+ 3. You may copy and distribute the Program (or a portion or derivative of
123
+ it, under Paragraph 2) in object code or executable form under the terms of
124
+ Paragraphs 1 and 2 above provided that you also do one of the following:
125
+
126
+ a) accompany it with the complete corresponding machine-readable
127
+ source code, which must be distributed under the terms of
128
+ Paragraphs 1 and 2 above; or,
129
+
130
+ b) accompany it with a written offer, valid for at least three
131
+ years, to give any third party free (except for a nominal charge
132
+ for the cost of distribution) a complete machine-readable copy of the
133
+ corresponding source code, to be distributed under the terms of
134
+ Paragraphs 1 and 2 above; or,
135
+
136
+ c) accompany it with the information you received as to where the
137
+ corresponding source code may be obtained. (This alternative is
138
+ allowed only for noncommercial distribution and only if you
139
+ received the program in object code or executable form alone.)
140
+
141
+ Source code for a work means the preferred form of the work for making
142
+ modifications to it. For an executable file, complete source code means
143
+ all the source code for all modules it contains; but, as a special
144
+ exception, it need not include source code for modules which are standard
145
+ libraries that accompany the operating system on which the executable
146
+ file runs, or for standard header files or definitions files that
147
+ accompany that operating system.
148
+
149
+ 4. You may not copy, modify, sublicense, distribute or transfer the
150
+ Program except as expressly provided under this General Public License.
151
+ Any attempt otherwise to copy, modify, sublicense, distribute or transfer
152
+ the Program is void, and will automatically terminate your rights to use
153
+ the Program under this License. However, parties who have received
154
+ copies, or rights to use copies, from you under this General Public
155
+ License will not have their licenses terminated so long as such parties
156
+ remain in full compliance.
157
+
158
+ 5. By copying, distributing or modifying the Program (or any work based
159
+ on the Program) you indicate your acceptance of this license to do so,
160
+ and all its terms and conditions.
161
+
162
+ 6. Each time you redistribute the Program (or any work based on the
163
+ Program), the recipient automatically receives a license from the original
164
+ licensor to copy, distribute or modify the Program subject to these
165
+ terms and conditions. You may not impose any further restrictions on the
166
+ recipients' exercise of the rights granted herein.
167
+
168
+ 7. The Free Software Foundation may publish revised and/or new versions
169
+ of the General Public License from time to time. Such new versions will
170
+ be similar in spirit to the present version, but may differ in detail to
171
+ address new problems or concerns.
172
+
173
+ Each version is given a distinguishing version number. If the Program
174
+ specifies a version number of the license which applies to it and "any
175
+ later version", you have the option of following the terms and conditions
176
+ either of that version or of any later version published by the Free
177
+ Software Foundation. If the Program does not specify a version number of
178
+ the license, you may choose any version ever published by the Free Software
179
+ Foundation.
180
+
181
+ 8. If you wish to incorporate parts of the Program into other free
182
+ programs whose distribution conditions are different, write to the author
183
+ to ask for permission. For software which is copyrighted by the Free
184
+ Software Foundation, write to the Free Software Foundation; we sometimes
185
+ make exceptions for this. Our decision will be guided by the two goals
186
+ of preserving the free status of all derivatives of our free software and
187
+ of promoting the sharing and reuse of software generally.
188
+
189
+ NO WARRANTY
190
+
191
+ 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
192
+ FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
193
+ OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
194
+ PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
195
+ OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
196
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
197
+ TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
198
+ PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
199
+ REPAIR OR CORRECTION.
200
+
201
+ 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
202
+ WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
203
+ REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
204
+ INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
205
+ OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
206
+ TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
207
+ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
208
+ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
209
+ POSSIBILITY OF SUCH DAMAGES.
210
+
211
+ END OF TERMS AND CONDITIONS
212
+
213
+ Appendix: How to Apply These Terms to Your New Programs
214
+
215
+ If you develop a new program, and you want it to be of the greatest
216
+ possible use to humanity, the best way to achieve this is to make it
217
+ free software which everyone can redistribute and change under these
218
+ terms.
219
+
220
+ To do so, attach the following notices to the program. It is safest to
221
+ attach them to the start of each source file to most effectively convey
222
+ the exclusion of warranty; and each file should have at least the
223
+ "copyright" line and a pointer to where the full notice is found.
224
+
225
+ <one line to give the program's name and a brief idea of what it does.>
226
+ Copyright (C) 19yy <name of author>
227
+
228
+ This program is free software; you can redistribute it and/or modify
229
+ it under the terms of the GNU General Public License as published by
230
+ the Free Software Foundation; either version 1, or (at your option)
231
+ any later version.
232
+
233
+ This program is distributed in the hope that it will be useful,
234
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
235
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
236
+ GNU General Public License for more details.
237
+
238
+ You should have received a copy of the GNU General Public License
239
+ along with this program; if not, write to the Free Software
240
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA
241
+
242
+
243
+ Also add information on how to contact you by electronic and paper mail.
244
+
245
+ If the program is interactive, make it output a short notice like this
246
+ when it starts in an interactive mode:
247
+
248
+ Gnomovision version 69, Copyright (C) 19xx name of author
249
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
250
+ This is free software, and you are welcome to redistribute it
251
+ under certain conditions; type `show c' for details.
252
+
253
+ The hypothetical commands `show w' and `show c' should show the
254
+ appropriate parts of the General Public License. Of course, the
255
+ commands you use may be called something other than `show w' and `show
256
+ c'; they could even be mouse-clicks or menu items--whatever suits your
257
+ program.
258
+
259
+ You should also get your employer (if you work as a programmer) or your
260
+ school, if any, to sign a "copyright disclaimer" for the program, if
261
+ necessary. Here a sample; alter the names:
262
+
263
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
264
+ program `Gnomovision' (a program to direct compilers to make passes
265
+ at assemblers) written by James Hacker.
266
+
267
+ <signature of Ty Coon>, 1 April 1989
268
+ Ty Coon, President of Vice
269
+
270
+ That's all there is to it!
271
+
272
+
273
+ --- The Artistic License 1.0 ---
274
+
275
+ This software is Copyright (c) 2014 by Masahiro Nagano <kazeburo@gmail.com>.
276
+
277
+ This is free software, licensed under:
278
+
279
+ The Artistic License 1.0
280
+
281
+ The Artistic License
282
+
283
+ Preamble
284
+
285
+ The intent of this document is to state the conditions under which a Package
286
+ may be copied, such that the Copyright Holder maintains some semblance of
287
+ artistic control over the development of the package, while giving the users of
288
+ the package the right to use and distribute the Package in a more-or-less
289
+ customary fashion, plus the right to make reasonable modifications.
290
+
291
+ Definitions:
292
+
293
+ - "Package" refers to the collection of files distributed by the Copyright
294
+ Holder, and derivatives of that collection of files created through
295
+ textual modification.
296
+ - "Standard Version" refers to such a Package if it has not been modified,
297
+ or has been modified in accordance with the wishes of the Copyright
298
+ Holder.
299
+ - "Copyright Holder" is whoever is named in the copyright or copyrights for
300
+ the package.
301
+ - "You" is you, if you're thinking about copying or distributing this Package.
302
+ - "Reasonable copying fee" is whatever you can justify on the basis of media
303
+ cost, duplication charges, time of people involved, and so on. (You will
304
+ not be required to justify it to the Copyright Holder, but only to the
305
+ computing community at large as a market that must bear the fee.)
306
+ - "Freely Available" means that no fee is charged for the item itself, though
307
+ there may be fees involved in handling the item. It also means that
308
+ recipients of the item may redistribute it under the same conditions they
309
+ received it.
310
+
311
+ 1. You may make and give away verbatim copies of the source form of the
312
+ Standard Version of this Package without restriction, provided that you
313
+ duplicate all of the original copyright notices and associated disclaimers.
314
+
315
+ 2. You may apply bug fixes, portability fixes and other modifications derived
316
+ from the Public Domain or from the Copyright Holder. A Package modified in such
317
+ a way shall still be considered the Standard Version.
318
+
319
+ 3. You may otherwise modify your copy of this Package in any way, provided that
320
+ you insert a prominent notice in each changed file stating how and when you
321
+ changed that file, and provided that you do at least ONE of the following:
322
+
323
+ a) place your modifications in the Public Domain or otherwise make them
324
+ Freely Available, such as by posting said modifications to Usenet or an
325
+ equivalent medium, or placing the modifications on a major archive site
326
+ such as ftp.uu.net, or by allowing the Copyright Holder to include your
327
+ modifications in the Standard Version of the Package.
328
+
329
+ b) use the modified Package only within your corporation or organization.
330
+
331
+ c) rename any non-standard executables so the names do not conflict with
332
+ standard executables, which must also be provided, and provide a separate
333
+ manual page for each non-standard executable that clearly documents how it
334
+ differs from the Standard Version.
335
+
336
+ d) make other distribution arrangements with the Copyright Holder.
337
+
338
+ 4. You may distribute the programs of this Package in object code or executable
339
+ form, provided that you do at least ONE of the following:
340
+
341
+ a) distribute a Standard Version of the executables and library files,
342
+ together with instructions (in the manual page or equivalent) on where to
343
+ get the Standard Version.
344
+
345
+ b) accompany the distribution with the machine-readable source of the Package
346
+ with your modifications.
347
+
348
+ c) accompany any non-standard executables with their corresponding Standard
349
+ Version executables, giving the non-standard executables non-standard
350
+ names, and clearly documenting the differences in manual pages (or
351
+ equivalent), together with instructions on where to get the Standard
352
+ Version.
353
+
354
+ d) make other distribution arrangements with the Copyright Holder.
355
+
356
+ 5. You may charge a reasonable copying fee for any distribution of this
357
+ Package. You may charge any fee you choose for support of this Package. You
358
+ may not charge a fee for this Package itself. However, you may distribute this
359
+ Package in aggregate with other (possibly commercial) programs as part of a
360
+ larger (possibly commercial) software distribution provided that you do not
361
+ advertise this Package as a product of your own.
362
+
363
+ 6. The scripts and library files supplied as input to or produced as output
364
+ from the programs of this Package do not automatically fall under the copyright
365
+ of this Package, but belong to whomever generated them, and may be sold
366
+ commercially, and may be aggregated with this Package.
367
+
368
+ 7. C or perl subroutines supplied by you and linked into this Package shall not
369
+ be considered part of this Package.
370
+
371
+ 8. The name of the Copyright Holder may not be used to endorse or promote
372
+ products derived from this software without specific prior written permission.
373
+
374
+ 9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED
375
+ WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
376
+ MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
377
+
378
+ The End
data/README.md ADDED
@@ -0,0 +1,208 @@
1
+ # Rhebok
2
+
3
+ This project is still in a very early development stage. IT IS NOT READY FOR PRODUCTION!
4
+
5
+ Rhebok is High Performance Rack Handler/Web Server. 2x performance when compared against Unicorn.
6
+
7
+ Rhebok supports following features.
8
+
9
+ - ultra fast HTTP processing using picohttpparser
10
+ - uses accept4(2) if OS support
11
+ - uses writev(2) for output responses
12
+ - prefork and graceful shutdown using prefork_engine
13
+ - hot deploy and unix domain socket using start_server
14
+ - only supports HTTP/1.0. But does not support Keepalive.
15
+
16
+ This server is suitable for running HTTP application servers behind a reverse proxy like nginx.
17
+
18
+ ## Installation
19
+
20
+ Add this line to your application's Gemfile:
21
+
22
+ ```ruby
23
+ gem 'rhebok'
24
+ ```
25
+
26
+ And then execute:
27
+
28
+ $ bundle
29
+
30
+ Or install it yourself as:
31
+
32
+ $ gem install rhebok
33
+
34
+ ## Usage
35
+
36
+ $ rackup -s Rhebok -O Port=8080 -O MaxWorkers=10 -O MaxRequestPerChild=1000 -E production config.ru
37
+
38
+ ## Sample configuration with Nginx
39
+
40
+ nginx.conf
41
+
42
+ http {
43
+ upstream app {
44
+ server unix:/path/to/app.sock;
45
+ }
46
+ server {
47
+ location / {
48
+ proxy_pass http://app;
49
+ }
50
+ location ~ ^/(stylesheets|images)/ {
51
+ root /path/to/webapp/public;
52
+ }
53
+ }
54
+ }
55
+
56
+ command line of running Rhebok
57
+
58
+ $ start_server --path /path/to/app.sock --backlog 16384 -- rackup -s Rhebok \
59
+ -O MaxWorkers=10 -O MaxRequestPerChild=1000 -E production config.ru
60
+
61
+ ## Options
62
+
63
+ ### Host
64
+
65
+ hostname or ip address to bind
66
+
67
+ ### Port
68
+
69
+ port to bind
70
+
71
+ ### MaxWorkers
72
+
73
+ number of worker processes (default: 10)
74
+
75
+ ### MaxRequestPerChild
76
+
77
+ max. number of requests to be handled before a worker process exits (default: 1000)
78
+ This option looks like Apache's MaxRequestPerChild
79
+
80
+ ### MinRequestPerChild
81
+
82
+ if set, randomizes the number of requests handled by a single worker process between the value and that supplied by MaxRequestPerChlid (default: none)
83
+
84
+ ### Timeout
85
+
86
+ seconds until timeout (default: 300)
87
+
88
+ ### SpawnInterval
89
+
90
+ if set, worker processes will not be spawned more than once than every given seconds. Also, when SIGHUP is being received, no more than one worker processes will be collected every given seconds. This feature is useful for doing a "slow-restart". See http://blog.kazuhooku.com/2011/04/web-serverstarter-parallelprefork.html for more information. (default: none)
91
+
92
+ ## Benchmark
93
+
94
+ Rhebok and Unicorn "Hello World" Benchmark (behind nginx reverse proxy)
95
+
96
+ ruby version
97
+
98
+ $ ruby -v
99
+ ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-linux]
100
+
101
+ nginx.conf
102
+
103
+ worker_processes 16;
104
+
105
+ events {
106
+ worker_connections 50000;
107
+ }
108
+
109
+ http {
110
+ include mime.types;
111
+ access_log off;
112
+ sendfile on;
113
+ tcp_nopush on;
114
+ tcp_nodelay on;
115
+ etag off;
116
+ upstream app {
117
+ server unix:/dev/shm/app.sock;
118
+ }
119
+ server {
120
+ location / {
121
+ proxy_pass http://app;
122
+ }
123
+ }
124
+ }
125
+
126
+ config.ru
127
+
128
+ class HelloApp
129
+ def call(env)
130
+ [
131
+ 200,
132
+ { 'Content-Type' => 'text/html' },
133
+ ['hello world ']
134
+ ]
135
+ end
136
+ end
137
+ run HelloApp.new
138
+
139
+ ### Rhebok
140
+
141
+ command to run
142
+
143
+ $ start_server --path /path/to/app.sock -- rackup -s Rhebok \
144
+ -O MaxWorkers=8 -O MaxRequestPerChild=1000000 -E production config.ru
145
+
146
+ result
147
+
148
+ $ ./wrk -t 4 -c 500 -d 30 http://localhost/
149
+ Running 30s test @ http://localhost/
150
+ 4 threads and 500 connections
151
+ Thread Stats Avg Stdev Max +/- Stdev
152
+ Latency 1.85ms 2.94ms 816.72ms 99.24%
153
+ Req/Sec 70.14k 9.13k 110.33k 76.74%
154
+ 7885663 requests in 30.00s, 1.29GB read
155
+ Requests/sec: 262864.06
156
+ Transfer/sec: 44.11MB
157
+
158
+ ### Unicorn
159
+
160
+ unicorn.rb
161
+
162
+ $ cat unicorn.rb
163
+ worker_processes 8
164
+ preload_app true
165
+ listen "/dev/shm/app.sock"
166
+
167
+ command to run
168
+
169
+ $ unicorn -E production -c unicorn.rb config.ru
170
+
171
+ result
172
+
173
+ $ ./wrk -t 4 -c 500 -d 30 http://localhost/
174
+ Running 30s test @ http://localhost/
175
+ 4 threads and 500 connections
176
+ Thread Stats Avg Stdev Max +/- Stdev
177
+ Latency 3.57ms 0.95ms 206.42ms 94.66%
178
+ Req/Sec 35.62k 3.79k 56.69k 77.38%
179
+ 4122935 requests in 30.00s, 754.74MB read
180
+ Socket errors: connect 0, read 0, write 0, timeout 47
181
+ Requests/sec: 137435.52
182
+ Transfer/sec: 25.16MB
183
+
184
+ ### Server Environment
185
+
186
+ I used EC2 for benchmarking. Instance type if c3.8xlarge(32cores). A benchmark tool and web servers were executed at same hosts.
187
+
188
+ ## See Also
189
+
190
+ [Gazelle](https://metacpan.org/pod/Gazelle) Rhebok is created based on Gazelle code
191
+
192
+ [Server::Stater](https://metacpan.org/pod/Server::Starter) a superdaemon for hot-deploying server programs
193
+
194
+ [picohttpparser](https://github.com/h2o/picohttpparser) fast http parser
195
+
196
+ ## LICENSE
197
+
198
+ Copyright (C) Masahiro Nagano.
199
+
200
+ This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
201
+
202
+ ## Contributing
203
+
204
+ 1. Fork it ( https://github.com/kazeburo/rhebok/fork )
205
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
206
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
207
+ 4. Push to the branch (`git push origin my-new-feature`)
208
+ 5. Create a new Pull Request