Class: M2R::Connection

Inherits:
Object
  • Object
show all
Defined in:
lib/m2r/connection.rb

Overview

Connection for exchanging data with mongrel2

Defined Under Namespace

Classes: Error

Instance Method Summary collapse

Constructor Details

#initialize(request_socket, response_socket) ⇒ Connection

Returns a new instance of Connection.

Parameters:

  • request_socket (ZMQ::Socket)

    socket for receiving requests from Mongrel2

  • response_socket (ZMQ::Socket)

    socket for sending responses to Mongrel2



13
14
15
16
# File 'lib/m2r/connection.rb', line 13

def initialize(request_socket, response_socket)
  @request_socket  = request_socket
  @response_socket = response_socket
end

Instance Method Details

#connectionConnection

For compatibility with M2R::ConnectionFactory

Returns:



22
23
24
# File 'lib/m2r/connection.rb', line 22

def connection
  self
end

#deliver(uuid, connection_ids, data) ⇒ String

Delivers data to multiple mongrel2 connections. Useful for streaming.

Parameters:

  • uuid (String)

    Mongrel2 instance uuid

  • connection_ids (Array<String>, String)

    Mongrel2 connections ids

  • data (String)

    Data that should be delivered to the connections

Returns:

  • (String)

    M2 response message

Raises:



57
58
59
60
61
62
# File 'lib/m2r/connection.rb', line 57

def deliver(uuid, connection_ids, data)
  msg = "#{uuid} #{TNetstring.dump([*connection_ids].join(' '))} #{data}"
  ret = @response_socket.send_string(msg, ZMQ::NOBLOCK)
  raise Error, "Unable to deliver message: #{ZMQ::Util.error_string}" if ret < 0
  return msg
end

#receiveString

Note:

This is blocking call

Returns Mongrel2 request

Returns:

  • (String)

    M2 request message

Raises:



31
32
33
34
35
# File 'lib/m2r/connection.rb', line 31

def receive
  ret = @request_socket.recv_string(msg = "")
  raise Error, "Unable to receive message: #{ZMQ::Util.error_string}" if ret < 0
  return msg
end

#reply(request, response_or_string) ⇒ String

Sends response to Mongrel2 for given request

Parameters:

  • response_or_string (Response, #to_s)

    Response for the request. Anything convertable to [String]

Returns:

  • (String)

    M2 response message



43
44
45
46
# File 'lib/m2r/connection.rb', line 43

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