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.
88 89 |
# File 'lib/thin/backends/base.rb', line 88 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.
77 78 79 80 81 82 83 84 85 |
# File 'lib/thin/backends/base.rb', line 77 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.
97 98 99 100 101 102 103 |
# File 'lib/thin/backends/base.rb', line 97 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.
106 107 108 |
# File 'lib/thin/backends/base.rb', line 106 def empty? @connections.empty? end |
#running? ⇒ Boolean
Returns true
if the backend is connected and running.
92 93 94 |
# File 'lib/thin/backends/base.rb', line 92 def running? @running end |
#size ⇒ Object
Number of active connections.
111 112 113 |
# File 'lib/thin/backends/base.rb', line 111 def size @connections.size end |
#start ⇒ Object
Start the backend and connect it.
46 47 48 49 50 51 52 53 |
# File 'lib/thin/backends/base.rb', line 46 def start @stopping = false EventMachine.run do connect @running = true end end |
#stop ⇒ Object
Stop of the backend from accepting new connections.
56 57 58 59 60 61 62 63 |
# File 'lib/thin/backends/base.rb', line 56 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.
66 67 68 69 70 71 72 73 |
# File 'lib/thin/backends/base.rb', line 66 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 |