wildsonet-server 0.2.1-java → 0.2.2-java

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/Gemfile CHANGED
@@ -1,3 +1,5 @@
1
1
  source :rubygems
2
2
 
3
- gem "rack"
3
+ gem "rack"
4
+ gem "activesupport"
5
+ gem "wildsonet-netty"
data/README.rdoc CHANGED
@@ -4,7 +4,7 @@ Server backend for WildSoNet.
4
4
 
5
5
  == Implementation
6
6
 
7
- Embeds jetty web server and implements Java's servlet with simple Rack interface.
7
+ Implements simple Rack interdace on top of Netty library.
8
8
 
9
9
  == Status
10
10
 
@@ -29,6 +29,8 @@ This server should be used behind front-end server.
29
29
  }
30
30
 
31
31
  location / {
32
+ proxy_set_header X-For-Host $http_host;
33
+ proxy_set_header X-For-Scheme $scheme;
32
34
  proxy_pass http://<rails_address>:<address_port>;
33
35
  }
34
36
 
@@ -58,6 +60,12 @@ where App is your Rack application.
58
60
  * Configuration (threadpool)
59
61
  * Lots of other features
60
62
 
63
+ == Changes
64
+
65
+ === 0.2.2
66
+
67
+ * Rewritten from Jetty to Netty - no need for full web server
68
+
61
69
  == Contributing to wildsonet-server
62
70
 
63
71
  * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
Binary file
@@ -1,5 +1,5 @@
1
1
  module WildSoNet
2
2
  module Server
3
- VERSION = "0.2.1" unless defined?(::WildSoNet::Server::VERSION)
3
+ VERSION = "0.2.2" unless defined?(::WildSoNet::Server::VERSION)
4
4
  end
5
5
  end
@@ -1,8 +1,9 @@
1
1
  require "java"
2
2
 
3
- Dir.glob(File.join(File.dirname(__FILE__), "..", "jars", "*")) do |file|
4
- require file
5
- end
3
+ require "wildsonet-netty"
4
+ require "active_support/core_ext/hash/reverse_merge"
5
+
6
+ require File.join(File.dirname(__FILE__), "..", "jars", "wildsonet_server.jar")
6
7
 
7
8
  require "wildsonet-server-version"
8
9
 
@@ -12,19 +13,21 @@ module WildSoNet
12
13
  # Rack extensions from WildSoNet
13
14
  module Server
14
15
 
15
- java_import "org.eclipse.jetty.server.Server"
16
- java_import "org.eclipse.jetty.server.nio.SelectChannelConnector"
17
- java_import "org.eclipse.jetty.servlet.ServletContextHandler"
18
- java_import "org.eclipse.jetty.servlet.ServletHolder"
16
+ java_import "cz.wildsonet.server.RackProxy"
17
+ java_import "cz.wildsonet.server.Server"
19
18
 
20
- java_import "org.jruby.embed.PathType"
21
- java_import "org.jruby.embed.ScriptingContainer"
22
- java_import "javax.servlet.http.HttpServlet"
19
+ java_import "org.jboss.netty.buffer.ChannelBuffers"
20
+ java_import "org.jboss.netty.handler.codec.http.DefaultHttpResponse"
21
+ java_import "org.jboss.netty.handler.codec.http.HttpResponseStatus"
22
+ java_import "org.jboss.netty.handler.codec.http.HttpVersion"
23
+ java_import "org.jboss.netty.channel.ChannelFutureListener"
23
24
 
24
25
  # Rack handler utilizing Jetty web server. Works with nginx as frontend server to proxy the requests.
25
26
  # Jetty handles only dynamic requests. Static requests are handled by nginx proxy.
26
27
 
27
- class Handler < HttpServlet
28
+ class Handler
29
+
30
+ include RackProxy
28
31
 
29
32
  # Starts the server.
30
33
  #
@@ -36,132 +39,62 @@ module WildSoNet
36
39
  options[:Host] ||= "0.0.0.0"
37
40
 
38
41
  # Create new server
39
- @@server = Server.new
40
-
41
- # Create new connector and configure it according to options
42
- connector = SelectChannelConnector.new
43
- connector.port = options[:Port]
44
- connector.host = options[:Host]
45
-
46
- # Add connector to server
47
- @@server.connectors = [connector]
48
-
49
- # Create new server context and configure it ad root
50
- context = ServletContextHandler.new(ServletContextHandler::NO_SESSIONS)
51
- context.contextPath = "/"
42
+ @@server = Server.new(options[:Host], options[:Port], self.new(app, options))
52
43
 
53
- # Add context to server
54
- @@server.handler = context
55
-
56
- # Create new handler
57
- servlet = Handler.new
58
- servlet.setup(app, options)
59
-
60
- # Connect the handler with context
61
- context.addServlet(ServletHolder.new(servlet), "/*")
62
-
63
- # Start server
64
- @@server.start
65
- @@server.join
66
-
67
- end
44
+ Thread.new do
45
+ while true
46
+ Kernel.sleep 10
47
+ end
48
+ end.join
68
49
 
69
- # Stops the server
70
- def self.shutdown
71
- # Stop server
72
- @@server.stop
73
- @@server = nil
74
50
  end
75
51
 
76
52
  # Setup the server.
77
53
  #
78
54
  # @param app Rack application to start
79
55
  # @param options Options for server
80
- def setup(app, options)
81
- @app = app
56
+ def initialize(app, options)
57
+ @app = ::Rack::Lint.new(app)
82
58
  @options = options
83
-
84
- # By default serve static files from directory "public" in current directory
85
- @options[:Public] ||= File.expand_path("public")
86
59
  end
87
60
 
88
- # Handles the request. Servlet method.
89
- #
90
- # @param request Request to process
91
- # @param response Response to the request
92
- def service request, response
93
- # "Compute" the path to request file
94
- file = File.join(@options[:Public], request.getRequestURI())
95
- # Check file existence
96
- if File.exists?(file) and File.file?(file)
97
- # Tell the proxy server(nginx) to serve this request from static files
98
- response.setHeader("X-Accel-Redirect", "/static" + request.getRequestURI())
99
- else
100
- # Process the request
101
- self.call(request, response)
102
- end
103
- end
61
+ def call env
104
62
 
105
- # Process the request
106
- #
107
- # @param request Request to be processed
108
- # @param response Response to the request
109
- def call request, response
110
-
111
- # Prepare basic Rack environment
112
- env = {
113
- "REQUEST_METHOD" => request.getMethod(),
114
- "SCRIPT_NAME" => "",
115
- "PATH_INFO" => request.getPathInfo() =~ /^\// ? request.getPathInfo() : "/" + request.getPathInfo(),
116
- "QUERY_STRING" => request.getQueryString(),
117
- "SERVER_NAME" => request.getServerName(),
118
- "SERVER_PORT" => request.getServerPort(),
119
-
120
- "rack.version" => [1, 1],
121
- "rack.url_scheme" => request.isSecure() ? "https" : "http",
122
- "rack.input" => request.getInputStream().to_io,
123
- "rack.errors" => $stderr,
124
- "rack.multithread" => true,
125
- "rack.multiprocess" => false,
126
- "rack.run_once" => false,
127
-
128
- # If this environment parameter is true after request processing, returned body will not be written to response
129
- "wildsonet.written" => false
130
- }
131
-
132
- # Process HTTP headers from request; transforms header names into Rack format, if nil returned, the header is skipped
133
- request.getHeaderNames().each do |name|
134
- key = self.header_handler(name)
135
- if key
136
- env[key] = request.getHeader(name)
63
+ ruby = {}
64
+
65
+ env.keySet.each do |key|
66
+ case key
67
+ when "rack.input"
68
+ ruby[key] = env[key].to_io
69
+ when "rack.errors"
70
+ ruby[key] = env[key].to_io
71
+ else
72
+ ruby[key] = env[key]
137
73
  end
138
74
  end
139
75
 
140
- # Process the request
141
- status, headers, content = @app.call(env)
76
+ ruby["rack.version"] = ::Rack::VERSION
142
77
 
143
- # Copy headers from Rack response to Servlet response
144
- headers.each_pair do |key, value|
145
- response.addHeader(key, value)
78
+ status, headers, body = @app.call(ruby)
79
+
80
+ response = DefaultHttpResponse.new(HttpVersion::HTTP_1_1, HttpResponseStatus.valueOf(status))
81
+
82
+ headers.each_pair do |header, value|
83
+ response.addHeader(header, value)
146
84
  end
147
85
 
148
- # Set response status
149
- response.setStatus(status)
86
+ buffer = ChannelBuffers.dynamicBuffer
87
+
88
+ body.each do |line|
89
+ buffer.writeBytes(line.to_s.to_java_bytes)
90
+ end
150
91
 
151
- # Copy the content of request into Servlet output stream(writer)
152
- # Skips this step if environment parameter was set to true
153
- content.each do |part|
154
- response.writer.write(part)
155
- end unless env["wildsonet.written"]
92
+ response.content = buffer
156
93
 
157
- end
94
+ future = env["wsn.context"].channel.write(response)
158
95
 
159
- # Processes header names to Rack format
160
- #
161
- # @param name Header name to transform
162
- # @return Rack formatted header name or nil to skip the header
163
- def header_handler name
164
- "HTTP_" + name.to_s.sub("-", "_").upcase
96
+ future.addListener(ChannelFutureListener::CLOSE)
97
+
165
98
  end
166
99
 
167
100
  end
@@ -8,8 +8,8 @@ Gem::Specification.new do |s|
8
8
  s.name = "wildsonet-server"
9
9
  s.version = WildSoNet::Server::VERSION
10
10
  s.authors = ["Marek Jelen"]
11
- s.summary = "Server backends for WildSoNet"
12
- s.description = "Server backends for WildSoNet"
11
+ s.summary = "Server backend for WildSoNet"
12
+ s.description = "Server backend for WildSoNet on top of Netty library"
13
13
  s.email = "marek@jelen.biz"
14
14
  s.homepage = "http://github.com/marekjelen/wildsonet-server"
15
15
  s.licenses = ["MIT"]
@@ -26,14 +26,7 @@ Gem::Specification.new do |s|
26
26
  "Gemfile",
27
27
  "LICENSE.txt",
28
28
  "README.rdoc",
29
- "jars/jetty-continuation-7.2.0.v20101020.jar",
30
- "jars/jetty-http-7.2.0.v20101020.jar",
31
- "jars/jetty-io-7.2.0.v20101020.jar",
32
- "jars/jetty-security-7.2.0.v20101020.jar",
33
- "jars/jetty-server-7.2.0.v20101020.jar",
34
- "jars/jetty-servlet-7.2.0.v20101020.jar",
35
- "jars/jetty-util-7.2.0.v20101020.jar",
36
- "jars/servlet-api-2.5.jar",
29
+ "jars/wildsonet_server.jar",
37
30
  "lib/wildsonet-server.rb",
38
31
  "lib/wildsonet-server-version.rb",
39
32
  "wildsonet-server.gemspec"
@@ -45,6 +38,7 @@ Gem::Specification.new do |s|
45
38
  ]
46
39
 
47
40
  s.add_runtime_dependency("rack", ["> 1.0"])
48
-
41
+ s.add_runtime_dependency("wildsonet-netty", ["> 0.0"])
42
+ s.add_runtime_dependency("activesupport", ["> 3.0"])
49
43
  end
50
44
 
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 1
9
- version: 0.2.1
8
+ - 2
9
+ version: 0.2.2
10
10
  platform: java
11
11
  authors:
12
12
  - Marek Jelen
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-12-24 00:00:00 +01:00
17
+ date: 2010-12-30 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -31,7 +31,35 @@ dependencies:
31
31
  version: "1.0"
32
32
  type: :runtime
33
33
  version_requirements: *id001
34
- description: Server backends for WildSoNet
34
+ - !ruby/object:Gem::Dependency
35
+ name: wildsonet-netty
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ">"
41
+ - !ruby/object:Gem::Version
42
+ segments:
43
+ - 0
44
+ - 0
45
+ version: "0.0"
46
+ type: :runtime
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: activesupport
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">"
55
+ - !ruby/object:Gem::Version
56
+ segments:
57
+ - 3
58
+ - 0
59
+ version: "3.0"
60
+ type: :runtime
61
+ version_requirements: *id003
62
+ description: Server backend for WildSoNet on top of Netty library
35
63
  email: marek@jelen.biz
36
64
  executables: []
37
65
 
@@ -44,14 +72,7 @@ files:
44
72
  - Gemfile
45
73
  - LICENSE.txt
46
74
  - README.rdoc
47
- - jars/jetty-continuation-7.2.0.v20101020.jar
48
- - jars/jetty-http-7.2.0.v20101020.jar
49
- - jars/jetty-io-7.2.0.v20101020.jar
50
- - jars/jetty-security-7.2.0.v20101020.jar
51
- - jars/jetty-server-7.2.0.v20101020.jar
52
- - jars/jetty-servlet-7.2.0.v20101020.jar
53
- - jars/jetty-util-7.2.0.v20101020.jar
54
- - jars/servlet-api-2.5.jar
75
+ - jars/wildsonet_server.jar
55
76
  - lib/wildsonet-server.rb
56
77
  - lib/wildsonet-server-version.rb
57
78
  - wildsonet-server.gemspec
@@ -88,6 +109,6 @@ rubyforge_project:
88
109
  rubygems_version: 1.3.7
89
110
  signing_key:
90
111
  specification_version: 3
91
- summary: Server backends for WildSoNet
112
+ summary: Server backend for WildSoNet
92
113
  test_files: []
93
114
 
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file