Class: Aikido::Zen::RPC::Server
- Inherits:
-
Object
- Object
- Aikido::Zen::RPC::Server
- Includes:
- IPC::FramedIO
- Defined in:
- lib/aikido/zen/ipc/rpc.rb
Constant Summary
Constants included from IPC::FramedIO
IPC::FramedIO::READ_CHUNK_SIZE
Class Method Summary collapse
Instance Method Summary collapse
- #close ⇒ Object
- #handle(name, &block) ⇒ Object
- #host ⇒ Object
-
#initialize(secret, host = "127.0.0.1", port = 0, handshake_timeout: IPC::HANDSHAKE_TIMEOUT, read_timeout: IPC::READ_TIMEOUT, write_timeout: IPC::WRITE_TIMEOUT, max_read_size: nil, max_write_size: nil, logger: Aikido::Zen.config.logger) ⇒ Server
constructor
A new instance of Server.
- #port ⇒ Object
- #start ⇒ Object
- #stop ⇒ Object
Constructor Details
#initialize(secret, host = "127.0.0.1", port = 0, handshake_timeout: IPC::HANDSHAKE_TIMEOUT, read_timeout: IPC::READ_TIMEOUT, write_timeout: IPC::WRITE_TIMEOUT, max_read_size: nil, max_write_size: nil, logger: Aikido::Zen.config.logger) ⇒ Server
Returns a new instance of Server.
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
# File 'lib/aikido/zen/ipc/rpc.rb', line 45 def initialize( secret, host = "127.0.0.1", port = 0, handshake_timeout: IPC::HANDSHAKE_TIMEOUT, read_timeout: IPC::READ_TIMEOUT, write_timeout: IPC::WRITE_TIMEOUT, max_read_size: nil, max_write_size: nil, logger: Aikido::Zen.config.logger ) @read_timeout = read_timeout @write_timeout = write_timeout @max_read_size = max_read_size @max_write_size = max_write_size @logger = logger @handlers = {} @server = IPC::Server.new( secret, host, port, handshake_timeout: handshake_timeout ) end |
Class Method Details
.start(secret, host = "127.0.0.1", port = 0, handshake_timeout: IPC::HANDSHAKE_TIMEOUT, read_timeout: IPC::READ_TIMEOUT, write_timeout: IPC::WRITE_TIMEOUT, max_read_size: nil, max_write_size: nil, logger: Aikido::Zen.config.logger, &block) ⇒ Object
15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/aikido/zen/ipc/rpc.rb', line 15 def self.start( secret, host = "127.0.0.1", port = 0, handshake_timeout: IPC::HANDSHAKE_TIMEOUT, read_timeout: IPC::READ_TIMEOUT, write_timeout: IPC::WRITE_TIMEOUT, max_read_size: nil, max_write_size: nil, logger: Aikido::Zen.config.logger, &block ) server = new( secret, host, port, handshake_timeout: handshake_timeout, read_timeout: read_timeout, write_timeout: write_timeout, max_read_size: max_read_size, max_write_size: max_write_size, logger: logger ) block&.call(server) server.start server end |
Instance Method Details
#close ⇒ Object
104 105 106 |
# File 'lib/aikido/zen/ipc/rpc.rb', line 104 def close @server.close end |
#handle(name, &block) ⇒ Object
108 109 110 |
# File 'lib/aikido/zen/ipc/rpc.rb', line 108 def handle(name, &block) @handlers[name] = block end |
#host ⇒ Object
72 73 74 |
# File 'lib/aikido/zen/ipc/rpc.rb', line 72 def host @server.host end |
#port ⇒ Object
76 77 78 |
# File 'lib/aikido/zen/ipc/rpc.rb', line 76 def port @server.port end |
#start ⇒ Object
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/aikido/zen/ipc/rpc.rb', line 80 def start @server.start do |socket| # Disable Nagle/delayed-ACK to optimize request/response latency socket.setsockopt(Socket::IPPROTO_TCP, Socket::TCP_NODELAY, 1) @logger.info("RPC server: client connected") (socket) rescue EOFError, Errno::ECONNRESET, Errno::EPIPE # disconnected rescue IOError # client stopped rescue => err @logger.error("RPC server error: #{err.class}: #{err.}") @logger.debug(err.backtrace.join("\n")) ensure @logger.info("RPC server: client disconnected") end end |
#stop ⇒ Object
100 101 102 |
# File 'lib/aikido/zen/ipc/rpc.rb', line 100 def stop @server.stop end |