eventmachine-eventmachine_httpserver 0.1.1 → 0.1.2
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/README +48 -0
- data/eventmachine_httpserver.gemspec +3 -4
- data/eventmachine_httpserver.gemspec.tmpl +2 -2
- data/ext/http.cpp +20 -1
- metadata +5 -3
data/README
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
= eventmachine_httpserver
|
2
|
+
|
3
|
+
== EM::HttpServer vs Thin
|
4
|
+
|
5
|
+
+careo | is there a 25 word version of how it differs from thin?
|
6
|
+
+tmm1 | good question.. its probably faster, but only because it doesn't have a real http parser like thin
|
7
|
+
+wyhaines | It is faster. It's more of an nginx style parser than the mongrel, grammar based parser.
|
8
|
+
+careo | so perhaps a better fit for putting an http interface on top of a bunch of already-evented code?
|
9
|
+
+wyhaines | careo: It depends. There are very valid arguments for using an RFC-compliant parser a lot of the time.
|
10
|
+
+wyhaines | But, yeah, sometimes being strictly RFC compliant isn't something that you care about.
|
11
|
+
|
12
|
+
== Usage example
|
13
|
+
|
14
|
+
require 'eventmachine'
|
15
|
+
require 'evma_httpserver'
|
16
|
+
|
17
|
+
class MyHttpServer < EM::Connection
|
18
|
+
include EM::HttpServer
|
19
|
+
|
20
|
+
def post_init
|
21
|
+
super
|
22
|
+
no_environment_strings
|
23
|
+
end
|
24
|
+
|
25
|
+
def process_http_request
|
26
|
+
# the http request details are available via the following instance variables:
|
27
|
+
# @http_protocol
|
28
|
+
# @http_request_method
|
29
|
+
# @http_cookie
|
30
|
+
# @http_if_none_match
|
31
|
+
# @http_content_type
|
32
|
+
# @http_path_info
|
33
|
+
# @http_request_uri
|
34
|
+
# @http_query_string
|
35
|
+
# @http_post_content
|
36
|
+
# @http_headers
|
37
|
+
|
38
|
+
response = EM::DelegatedHttpResponse.new(self)
|
39
|
+
response.status = 200
|
40
|
+
response.content_type 'text/html'
|
41
|
+
response.content = '<center><h1>Hi there</h1></center>'
|
42
|
+
response.send_response
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
EM.run{
|
47
|
+
EM.start_server '0.0.0.0', 8080, MyHttpServer
|
48
|
+
}
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = %q{eventmachine_httpserver}
|
5
|
-
s.version = "0.1.
|
5
|
+
s.version = "0.1.2"
|
6
6
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
8
8
|
s.authors = ["Francis Cianfrocca"]
|
@@ -12,13 +12,12 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.email = %q{garbagecat10@gmail.com}
|
13
13
|
s.extensions = ["ext/extconf.rb"]
|
14
14
|
s.extra_rdoc_files = ["docs/COPYING", "docs/README", "docs/RELEASE_NOTES"]
|
15
|
-
s.files = ["Rakefile", "docs/COPYING", "docs/README", "docs/RELEASE_NOTES", "eventmachine_httpserver.gemspec", "eventmachine_httpserver.gemspec.tmpl", "ext/extconf.rb", "ext/http.cpp", "ext/http.h", "ext/rubyhttp.cpp", "lib/evma_httpserver.rb", "lib/evma_httpserver/response.rb", "test/test_app.rb", "test/test_delegated.rb", "test/test_response.rb"]
|
16
|
-
s.has_rdoc = true
|
15
|
+
s.files = ["README", "Rakefile", "docs/COPYING", "docs/README", "docs/RELEASE_NOTES", "eventmachine_httpserver.gemspec", "eventmachine_httpserver.gemspec.tmpl", "ext/extconf.rb", "ext/http.cpp", "ext/http.h", "ext/rubyhttp.cpp", "lib/evma_httpserver.rb", "lib/evma_httpserver/response.rb", "test/test_app.rb", "test/test_delegated.rb", "test/test_response.rb"]
|
17
16
|
s.homepage = %q{http://rubyeventmachine.com}
|
18
17
|
s.rdoc_options = ["--title", "EventMachine_HttpServer", "--main", "docs/README", "--line-numbers"]
|
19
18
|
s.require_paths = ["lib"]
|
20
19
|
s.required_ruby_version = Gem::Requirement.new("> 0.0.0")
|
21
|
-
s.rubygems_version = %q{1.3.
|
20
|
+
s.rubygems_version = %q{1.3.4}
|
22
21
|
s.summary = %q{EventMachine HTTP Server}
|
23
22
|
|
24
23
|
if s.respond_to? :specification_version then
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = %q{eventmachine_httpserver}
|
3
|
-
s.version = "0.1.
|
3
|
+
s.version = "0.1.2"
|
4
4
|
|
5
5
|
s.specification_version = 1 if s.respond_to? :specification_version=
|
6
6
|
|
@@ -20,4 +20,4 @@ Gem::Specification.new do |s|
|
|
20
20
|
s.required_ruby_version = Gem::Requirement.new("> 0.0.0")
|
21
21
|
s.rubygems_version = %q{1.3.1}
|
22
22
|
s.summary = %q{EventMachine HTTP Server}
|
23
|
-
end
|
23
|
+
end
|
data/ext/http.cpp
CHANGED
@@ -170,6 +170,15 @@ void HttpConnection_t::ConsumeData (const char *data, int length)
|
|
170
170
|
_Content = NULL;
|
171
171
|
}
|
172
172
|
RequestMethod = NULL;
|
173
|
+
#ifdef OS_WIN32
|
174
|
+
Cookie.erase(Cookie.begin(),Cookie.end());
|
175
|
+
IfNoneMatch.erase(IfNoneMatch.begin(),IfNoneMatch.end());
|
176
|
+
ContentType.erase(ContentType.begin(),ContentType.end());
|
177
|
+
PathInfo.erase(PathInfo.begin(),PathInfo.end());
|
178
|
+
RequestUri.erase(RequestUri.begin(),RequestUri.end());
|
179
|
+
QueryString.erase(QueryString.begin(),QueryString.end());
|
180
|
+
Protocol.erase(Protocol.begin(),Protocol.end());
|
181
|
+
#else
|
173
182
|
Cookie.clear();
|
174
183
|
IfNoneMatch.clear();
|
175
184
|
ContentType.clear();
|
@@ -177,6 +186,7 @@ void HttpConnection_t::ConsumeData (const char *data, int length)
|
|
177
186
|
RequestUri.clear();
|
178
187
|
QueryString.clear();
|
179
188
|
Protocol.clear();
|
189
|
+
#endif
|
180
190
|
|
181
191
|
if (bSetEnvironmentStrings) {
|
182
192
|
unsetenv ("REQUEST_METHOD");
|
@@ -460,7 +470,8 @@ bool HttpConnection_t::_InterpretRequest (const char *header)
|
|
460
470
|
const char *questionmark = strchr (blank, '?');
|
461
471
|
if (questionmark && (questionmark >= blank2))
|
462
472
|
questionmark = NULL;
|
463
|
-
const char *fragment = strpbrk ((questionmark ? (questionmark+1) : blank), "#;");
|
473
|
+
// const char *fragment = strpbrk ((questionmark ? (questionmark+1) : blank), "#;");
|
474
|
+
const char *fragment = strpbrk ((questionmark ? (questionmark+1) : blank), "#");
|
464
475
|
if (fragment && (fragment >= blank2))
|
465
476
|
fragment = NULL;
|
466
477
|
|
@@ -482,7 +493,11 @@ bool HttpConnection_t::_InterpretRequest (const char *header)
|
|
482
493
|
string req (blank, fragment - blank);
|
483
494
|
PathInfo = req.c_str();
|
484
495
|
RequestUri = req.c_str();
|
496
|
+
#ifdef OS_WIN32
|
497
|
+
QueryString.erase(QueryString.begin(),QueryString.end());
|
498
|
+
#else
|
485
499
|
QueryString.clear();
|
500
|
+
#endif
|
486
501
|
if (bSetEnvironmentStrings) {
|
487
502
|
setenv ("PATH_INFO", req.c_str(), true);
|
488
503
|
setenv ("REQUEST_URI", req.c_str(), true);
|
@@ -494,7 +509,11 @@ bool HttpConnection_t::_InterpretRequest (const char *header)
|
|
494
509
|
string req (blank, blank2 - blank);
|
495
510
|
PathInfo = req.c_str();
|
496
511
|
RequestUri = req.c_str();
|
512
|
+
#ifdef OS_WIN32
|
513
|
+
QueryString.erase(QueryString.begin(),QueryString.end());
|
514
|
+
#else
|
497
515
|
QueryString.clear();
|
516
|
+
#endif
|
498
517
|
if (bSetEnvironmentStrings) {
|
499
518
|
setenv ("PATH_INFO", req.c_str(), true);
|
500
519
|
setenv ("REQUEST_URI", req.c_str(), true);
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eventmachine-eventmachine_httpserver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Francis Cianfrocca
|
@@ -23,6 +23,7 @@ extra_rdoc_files:
|
|
23
23
|
- docs/README
|
24
24
|
- docs/RELEASE_NOTES
|
25
25
|
files:
|
26
|
+
- README
|
26
27
|
- Rakefile
|
27
28
|
- docs/COPYING
|
28
29
|
- docs/README
|
@@ -38,8 +39,9 @@ files:
|
|
38
39
|
- test/test_app.rb
|
39
40
|
- test/test_delegated.rb
|
40
41
|
- test/test_response.rb
|
41
|
-
has_rdoc:
|
42
|
+
has_rdoc: false
|
42
43
|
homepage: http://rubyeventmachine.com
|
44
|
+
licenses:
|
43
45
|
post_install_message:
|
44
46
|
rdoc_options:
|
45
47
|
- --title
|
@@ -64,7 +66,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
64
66
|
requirements: []
|
65
67
|
|
66
68
|
rubyforge_project:
|
67
|
-
rubygems_version: 1.
|
69
|
+
rubygems_version: 1.3.5
|
68
70
|
signing_key:
|
69
71
|
specification_version: 1
|
70
72
|
summary: EventMachine HTTP Server
|