Class: EventMachine::DeferrableChildProcess
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
|
Class Chain:
self,
Connection
|
|
|
Instance Chain:
self,
Deferrable,
Connection
|
|
| Inherits: |
EventMachine::Connection
|
| Defined in: | lib/em/processes.rb |
Overview
EM::DeferrableChildProcess is a sugaring of a common use-case
involving EM::popen.
Call the #open method on EM::DeferrableChildProcess, passing
a command-string. #open immediately returns an EM::Deferrable
object. It also schedules the forking of a child process, which
will execute the command passed to #open.
When the forked child terminates, the Deferrable will be signalled
and execute its callbacks, passing the data that the child process
wrote to stdout.
Constant Summary
Deferrable - Included
Class Method Summary
- .new ⇒ DeferrableChildProcess constructor Internal use only Internal use only
-
.open(cmd)
Sugars a common use-case involving forked child processes.
Connection - Inherited
| .new | Override .new so subclasses don't have to call super and can ignore connection-specific arguments. |
Instance Attribute Summary
Connection - Inherited
| #comm_inactivity_timeout | comm_inactivity_timeout returns the current value (float in seconds) of the inactivity-timeout property of network-connection and datagram-socket objects. |
| #comm_inactivity_timeout= | Allows you to set the inactivity-timeout property for a network connection or datagram socket. |
| #error? | Returns true if the connection is in an error state, false otherwise. |
| #notify_readable= | Watches connection for readability. |
| #notify_readable?, | |
| #notify_writable= | Watches connection for writeability. |
| #notify_writable? | Returns true if the connection is being watched for writability. |
| #paused?, | |
| #pending_connect_timeout | The duration after which a TCP connection in the connecting state will fail. |
| #pending_connect_timeout= | Sets the duration after which a TCP connection in a connecting state will fail. |
| #signature, #watch_only? | |
Instance Method Summary
- #receive_data(data) Internal use only Internal use only
- #unbind Internal use only Internal use only
Deferrable - Included
| #callback | Specify a block to be executed if and when the |
| #cancel_callback | Cancels an outstanding callback to &block if any. |
| #cancel_errback | Cancels an outstanding errback to &block if any. |
| #cancel_timeout | Cancels an outstanding timeout if any. |
| #errback | Specify a block to be executed if and when the |
| #fail | Sugar for set_deferred_status(:failed, ...). |
| #set_deferred_failure | Alias for Deferrable#fail. |
| #set_deferred_status | Sets the "disposition" (status) of the |
| #set_deferred_success | Alias for Deferrable#succeed. |
| #succeed | Sugar for set_deferred_status(:succeeded, ...). |
| #timeout | Setting a timeout on a |
Connection - Inherited
| #associate_callback_target | conn_associate_callback_target. |
| #close_connection | EventMachine::Connection#close_connection is called only by user code, and never by the event loop. |
| #close_connection_after_writing | A variant of #close_connection. |
| #connection_completed | Called by the event loop when a remote TCP connection attempt completes successfully. |
| #detach | Removes given connection from the event loop. |
| #disable_keepalive | t_disable_keepalive. |
| #enable_keepalive | t_enable_keepalive. |
| #get_cipher_bits, #get_cipher_name, #get_cipher_protocol, | |
| #get_idle_time | The number of seconds since the last send/receive activity on this connection. |
| #get_outbound_data_size | conn_get_outbound_data_size. |
| #get_peer_cert | If TLS is active on the connection, returns the remote X509 certificate as a string, in the popular PEM format. |
| #get_peername | This method is used with stream-connections to obtain the identity of the remotely-connected peer. |
| #get_pid | Returns the PID (kernel process identifier) of a subprocess associated with this |
| #get_proxied_bytes | The number of bytes proxied to another connection. |
| #get_sni_hostname, #get_sock_opt, | |
| #get_sockname | Used with stream-connections to obtain the identity of the local side of the connection. |
| #get_status | Returns a subprocess exit status. |
| #initialize | Stubbed initialize so legacy superclasses can safely call super. |
| #original_method, | |
| #pause | Pause a connection so that #send_data and #receive_data events are not fired until |
| #post_init | Called by the event loop immediately after the network connection has been established, and before resumption of the network loop. |
| #proxy_completed | called when the reactor finished proxying all of the requested bytes. |
| #proxy_incoming_to | EventMachine::Connection#proxy_incoming_to is called only by user code. |
| #proxy_target_unbound | Called by the reactor after attempting to relay incoming data to a descriptor (set as a proxy target descriptor with enable_proxy) that has already been closed. |
| #receive_data | Called by the event loop whenever data has been received by the network connection. |
| #reconnect | Reconnect to a given host/port with the current instance. |
| #resume | Resume a connection's #send_data and #receive_data events. |
| #send_data | Call this method to send data to the remote end of the network connection. |
| #send_datagram | Sends UDP messages. |
| #send_file_data | Like Connection#send_data, this sends data to the remote end of the network connection. |
| #set_sock_opt, | |
| #ssl_handshake_completed | Called by |
| #ssl_verify_peer | Called by |
| #start_tls | Call #start_tls at any point to initiate TLS encryption on connected streams. |
| #stop_proxying | A helper method for disable_proxy |
| #stream_file_data | Open a file on the filesystem and send it to the remote peer. |
| #unbind | called by the framework whenever a connection (either a server or client connection) is closed. |
Constructor Details
.new ⇒ DeferrableChildProcess
# File 'lib/em/processes.rb', line 43
def initialize super @data = [] end
Class Method Details
.open(cmd)
Sugars a common use-case involving forked child processes.
open takes a String argument containing an shell command
string (including arguments if desired). #open immediately
returns an Deferrable object, without blocking.
It also invokes EventMachine#popen to run the passed-in command in a forked child process.
When the forked child terminates, the Deferrable that
open calls its callbacks, passing the data returned
from the child process.
# File 'lib/em/processes.rb', line 60
def self.open cmd EventMachine.popen( cmd, DeferrableChildProcess ) end
Instance Method Details
#receive_data(data)
# File 'lib/em/processes.rb', line 65
def receive_data data @data << data end
#unbind
# File 'lib/em/processes.rb', line 70
def unbind succeed( @data.join ) end