Class: Net::AJP13::Server
- Inherits:
-
Object
- Object
- Net::AJP13::Server
- Includes:
- Mutex_m, Constants
- Defined in:
- lib/net/ajp13/server.rb
Overview
Provides a skeleton to implement an AJP 1.3 server.
Defined Under Namespace
Classes: BodyInput, ProcessRequestNotImplementedError
Instance Attribute Summary collapse
-
#host ⇒ Object
readonly
The instance accepts only requests from #host.
-
#logger ⇒ Object
:nodoc:.
-
#service ⇒ Object
readonly
The port number to bind.
Instance Method Summary collapse
-
#initialize(*args) ⇒ Server
constructor
host
-
Host to bind.
-
#process_request(request) ⇒ Object
You must override this method.
-
#start(sock = nil) ⇒ Object
Starts the server; opens the socket, begins accepting requests, .…
Constructor Details
#initialize(*args) ⇒ Server
host
-
Host to bind. If ommited or
nil
, the server will accept requests from any hosts. serivce
-
Port number to bind. It can be a service name registered in /etc/services (or NIS).
48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/net/ajp13/server.rb', line 48 def initialize(*args) #:args: [host,] service = DEFAULT_PORT @host = nil @service = DEFAULT_PORT case args.length when 2 @host = args[0] if args[0] @service = args[1] if args[1] @open_socket = lambda{ TCPServer.new(@host, @service) } when 1 @service = args[0] if args[0] @open_socket = lambda{ TCPServer.new(@service) } when 0 @open_socket = lambda{ TCPServer.new(@service) } else raise ArgumentError, "wrong number of arguments (#{args.length} for 0..2)" end end |
Instance Attribute Details
#host ⇒ Object (readonly)
The instance accepts only requests from #host. If host is nil
, it accepts requests from any hosts.
- See Also
-
TCPServer.new, bind(2)
70 71 72 |
# File 'lib/net/ajp13/server.rb', line 70 def host @host end |
#logger ⇒ Object
:nodoc:
76 77 78 |
# File 'lib/net/ajp13/server.rb', line 76 def logger @logger end |
#service ⇒ Object (readonly)
The port number to bind.
73 74 75 |
# File 'lib/net/ajp13/server.rb', line 73 def service @service end |
Instance Method Details
#process_request(request) ⇒ Object
You must override this method. The default implementation simply raises a ProcessRequestNotImplementedError.
request
-
The Net::AJP13::Request object that represents an accepted AJP request.
The return value must be a Net::AJP13::Response object.
130 131 132 |
# File 'lib/net/ajp13/server.rb', line 130 def process_request(request) raise ProcessRequestNotImplementedError, "Must be overridden." end |
#start(sock = nil) ⇒ Object
Starts the server; opens the socket, begins accepting requests, .…
sock
-
If not nil, the server uses
sock
instead of opening a new socket.
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |
# File 'lib/net/ajp13/server.rb', line 89 def start(sock = nil) if sock @sock = sock else @sock = @open_socket.call end @sock.listen(5) begin until @shutdown accepted = @sock.accept Thread.new { begin accepted.sync = false process(accepted) rescue StandardError => err logger.error("#{err.} from #{err.backtrace.join("\n")}") rescue Object => err logger.fatal("#{err.} from #{err.backtrace.join("\n")}") else logger.debug("closed") ensure accepted.close unless accepted.closed? end } end end logger.info("Exited normally.") rescue Interrupt logger.info("Exited by Interrupt.") ensure @sock.close if @sock and !@sock.closed? end |