Class: Net::AJP13::Server
- Inherits:
-
Object
- Object
- Net::AJP13::Server
- Includes:
- Mutex_m, Constants
- Defined in:
- lib/net/ajp13server.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
logger.
-
#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
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/ajp13server.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/ajp13server.rb', line 70 def host @host end |
#logger ⇒ Object
logger
76 77 78 |
# File 'lib/net/ajp13server.rb', line 76 def logger @logger end |
#service ⇒ Object (readonly)
The port number to bind.
73 74 75 |
# File 'lib/net/ajp13server.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.
128 129 130 |
# File 'lib/net/ajp13server.rb', line 128 def process_request(request) raise ProcessRequestNotImplementedError, "Must be overridden." end |
#start(sock = nil) ⇒ Object
85 86 87 88 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 |
# File 'lib/net/ajp13server.rb', line 85 def start(sock = nil) logger.info("Starting #{self.class}") if sock @sock = sock else @sock = @open_socket.call end @sock.listen(5) begin until @shutdown accepted = @sock.accept Thread.new { begin until accepted.closed? process(accepted) end rescue StandardError => err logger.error("#{err.} from #{err.backtrace("\n")}") rescue Object => err logger.fatal("#{err.} from #{err.backtrace("\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 |