Class: M2R::Connection
- Inherits:
-
Object
- Object
- M2R::Connection
- Defined in:
- lib/m2r/connection.rb
Overview
Connection for exchanging data with mongrel2
Defined Under Namespace
Classes: Error
Instance Method Summary collapse
-
#close ⇒ Object
Closes ZMQ sockets.
-
#connection ⇒ Connection
For compatibility with ConnectionFactory.
-
#deliver(uuid, connection_ids, data, trial = 1) ⇒ String
Delivers data to multiple mongrel2 connections.
-
#initialize(request_socket, response_socket) ⇒ Connection
constructor
A new instance of Connection.
-
#receive ⇒ String
Returns Mongrel2 request.
-
#reply(request, response_or_string) ⇒ String
Sends response to Mongrel2 for given request.
Constructor Details
#initialize(request_socket, response_socket) ⇒ Connection
Returns a new instance of Connection.
16 17 18 19 |
# File 'lib/m2r/connection.rb', line 16 def initialize(request_socket, response_socket) @request_socket = request_socket @response_socket = response_socket end |
Instance Method Details
#close ⇒ Object
Closes ZMQ sockets
82 83 84 85 |
# File 'lib/m2r/connection.rb', line 82 def close @request_socket.close @response_socket.close end |
#connection ⇒ Connection
For compatibility with M2R::ConnectionFactory
25 26 27 |
# File 'lib/m2r/connection.rb', line 25 def connection self end |
#deliver(uuid, connection_ids, data, trial = 1) ⇒ String
Delivers data to multiple mongrel2 connections. Useful for streaming.
64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/m2r/connection.rb', line 64 def deliver(uuid, connection_ids, data, trial = 1) msg = "#{uuid} #{TNetstring.dump([*connection_ids].join(' '))} #{data}" ret = @response_socket.send_string(msg, ZMQ::NonBlocking) if ret < 0 e = Error.new "Unable to deliver message: #{ZMQ::Util.error_string}" e.errno = ZMQ::Util.errno raise e end return msg rescue Connection::Error => er raise if trial >= 3 raise unless er.signal? deliver(uuid, connection_ids, data, trial + 1) end |
#receive ⇒ String
Note:
This is blocking call
Returns Mongrel2 request
34 35 36 37 38 39 40 41 42 |
# File 'lib/m2r/connection.rb', line 34 def receive ret = @request_socket.recv_string(msg = "") if ret < 0 e = Error.new "Unable to receive message: #{ZMQ::Util.error_string}" e.errno = ZMQ::Util.errno raise e end return msg end |
#reply(request, response_or_string) ⇒ String
Sends response to Mongrel2 for given request
50 51 52 53 |
# File 'lib/m2r/connection.rb', line 50 def reply(request, response_or_string) deliver(request.sender, request.conn_id, response_or_string.to_s) deliver(request.sender, request.conn_id, "") if close?(request, response_or_string) end |