class Raft4r::RPC::EMRPCClient
Constants
- RPC_TIMEOUT
Attributes
pending[R]
Public Class Methods
new(addr, port, sender_node_id)
click to toggle source
# File lib/raft4r/rpc_base.rb, line 82 def initialize addr, port, sender_node_id @addr = addr @port = port @current_reqid = Time.now.to_i + rand(1000) @pending = {} @node_id = sender_node_id @us = EM.open_datagram_socket '127.0.0.1', 0, RPCClientConn, self EM.add_periodic_timer(RPC_TIMEOUT / 2) do now = Time.now s1 = @pending.size @pending.delete_if {|k,v| now - v[2] > RPC_TIMEOUT } timeout_rpcs = s1 - @pending.size LOGGER.warn "timeout rpcs: #{timeout_rpcs}" if timeout_rpcs > 0 end end
Public Instance Methods
method_missing(method_sym, *arguments, &block)
click to toggle source
# File lib/raft4r/rpc_base.rb, line 98 def method_missing method_sym, *arguments, &block @current_reqid += 1 req = Request.new(@node_id, @current_reqid, method_sym, arguments) pack = Marshal.dump(req) @pending[req.req_id] = [req, block, Time.now] @us.send_datagram pack, @addr, @port end