Method: EventMachine::Connection#receive_data

Defined in:
lib/em/connection.rb

#receive_data(data) ⇒ Object

Note:

Depending on the protocol, buffer sizes and OS networking stack configuration, incoming data may or may not be “a complete message”. It is up to this handler to detect content boundaries to determine whether all the content (for example, full HTTP request) has been received and can be processed.

Called by the event loop whenever data has been received by the network connection. It is never called by user code. #receive_data is called with a single parameter, a String containing the network protocol data, which may of course be binary. You will generally redefine this method to perform your own processing of the incoming data.

Here’s a key point which is essential to understanding the event-driven programming model: EventMachine knows absolutely nothing about the protocol which your code implements. You must not make any assumptions about the size of the incoming data packets, or about their alignment on any particular intra-message or PDU boundaries (such as line breaks). receive_data can and will send you arbitrary chunks of data, with the only guarantee being that the data is presented to your code in the order it was collected from the network. Don’t even assume that the chunks of data will correspond to network packets, as EventMachine can and will coalesce several incoming packets into one, to improve performance. The implication for your code is that you generally will need to implement some kind of a state machine in your redefined implementation of receive_data. For a better understanding of this, read through the examples of specific protocol handlers in EventMachine::Protocols

The base-class implementation (which will be invoked only if you didn’t override it in your protocol handler) simply prints incoming data packet size to stdout.

Parameters:

  • data (String)

    Opaque incoming data.

See Also:



116
117
118
# File 'lib/em/connection.rb', line 116

def receive_data data
  puts "............>>>#{data.length}"
end