Class: Thin::Backends::Base
- Inherits:
-
Object
- Object
- Thin::Backends::Base
- Defined in:
- lib/thin/backends/base.rb
Overview
A Backend connects the server to the client. It handles:
-
connection/disconnection to the server
-
initialization of the connections
-
manitoring of the active connections.
Implementing your own backend
You can create your own minimal backend by inheriting this class and defining the connect
and disconnect
method. If your backend is not based on EventMachine you also need to redefine the start
, stop
, stop!
and config
methods.
Direct Known Subclasses
Instance Attribute Summary collapse
-
#maximum_connections ⇒ Object
Maximum number of file or socket descriptors that the server may open.
-
#maximum_persistent_connections ⇒ Object
Maximum number of connections that can be persistent.
-
#no_epoll ⇒ Object
Disable the use of epoll under Linux.
-
#persistent_connection_count ⇒ Object
Number of persistent connections currently opened.
-
#server ⇒ Object
Server serving the connections throught the backend.
-
#threaded ⇒ Object
writeonly
Allow using threads in the backend.
-
#timeout ⇒ Object
Maximum time for incoming data to arrive.
Instance Method Summary collapse
-
#close ⇒ Object
Free up resources used by the backend.
-
#config ⇒ Object
Configure the backend.
-
#connection_finished(connection) ⇒ Object
Called by a connection when it’s unbinded.
-
#empty? ⇒ Boolean
Returns
true
if no active connection. -
#initialize ⇒ Base
constructor
A new instance of Base.
-
#running? ⇒ Boolean
Returns
true
if the backend is connected and running. -
#size ⇒ Object
Number of active connections.
-
#start ⇒ Object
Start the backend and connect it.
-
#stop ⇒ Object
Stop of the backend from accepting new connections.
-
#stop! ⇒ Object
Force stop of the backend NOW, too bad for the current connections.
- #threaded? ⇒ Boolean
Constructor Details
#initialize ⇒ Base
Returns a new instance of Base.
36 37 38 39 40 41 42 43 |
# File 'lib/thin/backends/base.rb', line 36 def initialize @connections = [] @timeout = Server::DEFAULT_TIMEOUT @persistent_connection_count = 0 @maximum_connections = Server::DEFAULT_MAXIMUM_CONNECTIONS @maximum_persistent_connections = Server::DEFAULT_MAXIMUM_PERSISTENT_CONNECTIONS @no_epoll = false end |
Instance Attribute Details
#maximum_connections ⇒ Object
Maximum number of file or socket descriptors that the server may open.
21 22 23 |
# File 'lib/thin/backends/base.rb', line 21 def maximum_connections @maximum_connections end |
#maximum_persistent_connections ⇒ Object
Maximum number of connections that can be persistent
24 25 26 |
# File 'lib/thin/backends/base.rb', line 24 def maximum_persistent_connections @maximum_persistent_connections end |
#no_epoll ⇒ Object
Disable the use of epoll under Linux
34 35 36 |
# File 'lib/thin/backends/base.rb', line 34 def no_epoll @no_epoll end |
#persistent_connection_count ⇒ Object
Number of persistent connections currently opened
31 32 33 |
# File 'lib/thin/backends/base.rb', line 31 def persistent_connection_count @persistent_connection_count end |
#server ⇒ Object
Server serving the connections throught the backend
15 16 17 |
# File 'lib/thin/backends/base.rb', line 15 def server @server end |
#threaded=(value) ⇒ Object (writeonly)
Allow using threads in the backend.
27 28 29 |
# File 'lib/thin/backends/base.rb', line 27 def threaded=(value) @threaded = value end |
#timeout ⇒ Object
Maximum time for incoming data to arrive
18 19 20 |
# File 'lib/thin/backends/base.rb', line 18 def timeout @timeout end |
Instance Method Details
#close ⇒ Object
Free up resources used by the backend.
94 95 |
# File 'lib/thin/backends/base.rb', line 94 def close end |
#config ⇒ Object
Configure the backend. This method will be called before droping superuser privileges, so you can do crazy stuff that require godlike powers here.
83 84 85 86 87 88 89 90 91 |
# File 'lib/thin/backends/base.rb', line 83 def config # See http://rubyeventmachine.com/pub/rdoc/files/EPOLL.html EventMachine.epoll unless @no_epoll # Set the maximum number of socket descriptors that the server may open. # The process needs to have required privilege to set it higher the 1024 on # some systems. @maximum_connections = EventMachine.set_descriptor_table_size(@maximum_connections) unless Thin.win? end |
#connection_finished(connection) ⇒ Object
Called by a connection when it’s unbinded.
103 104 105 106 107 108 109 |
# File 'lib/thin/backends/base.rb', line 103 def connection_finished(connection) @persistent_connection_count -= 1 if connection.can_persist? @connections.delete(connection) # Finalize gracefull stop if there's no more active connection. stop! if @stopping && @connections.empty? end |
#empty? ⇒ Boolean
Returns true
if no active connection.
112 113 114 |
# File 'lib/thin/backends/base.rb', line 112 def empty? @connections.empty? end |
#running? ⇒ Boolean
Returns true
if the backend is connected and running.
98 99 100 |
# File 'lib/thin/backends/base.rb', line 98 def running? @running end |
#size ⇒ Object
Number of active connections.
117 118 119 |
# File 'lib/thin/backends/base.rb', line 117 def size @connections.size end |
#start ⇒ Object
Start the backend and connect it.
46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/thin/backends/base.rb', line 46 def start @stopping = false starter = proc do connect @running = true end # Allow for early run up of eventmachine. if EventMachine.reactor_running? starter.call else EventMachine.run(&starter) end end |
#stop ⇒ Object
Stop of the backend from accepting new connections.
62 63 64 65 66 67 68 69 |
# File 'lib/thin/backends/base.rb', line 62 def stop @running = false @stopping = true # Do not accept anymore connection disconnect stop! if @connections.empty? end |
#stop! ⇒ Object
Force stop of the backend NOW, too bad for the current connections.
72 73 74 75 76 77 78 79 |
# File 'lib/thin/backends/base.rb', line 72 def stop! @running = false @stopping = false EventMachine.stop if EventMachine.reactor_running? @connections.each { |connection| connection.close_connection } close end |
#threaded? ⇒ Boolean
28 |
# File 'lib/thin/backends/base.rb', line 28 def threaded?; @threaded end |