EventMachine implements a fast, single-threaded engine for arbitrary network communications. It's extremely easy to use in Ruby.
EventMachine wraps all interactions with IP sockets, allowing programs to concentrate on the implementation of network protocols. It can be used to create both network servers and clients.
To create a server or client, a Ruby program only needs to specify the IP address and port, and provide a Module that implements the communications protocol. Implementations of several standard network protocols are provided with the package, primarily to serve as examples. The real goal of EventMachine is to enable programs to easily interface with other programs using TCP/IP, especially if custom protocols are required.
A Ruby program uses EventMachine by registering the addresses and ports of network servers and clients, and then entering an event-handling loop. EventMachine contains glue code in Ruby which will execute callbacks to user-supplied code for all significant events occurring in the clients and servers. These events include connection acceptance, startup, data-receipt, shutdown, and timer events. Arbitrary processing can be performed by user code during event callbacks, including sending data to one or more remote network peers, startup and shutdown of network connections, and installation of new event handlers.
The EventMachine implements a very familiar model for network programming.
1) the maximum possible isolation of user code from network objects like sockets;
2) maximum performance and scalability;
3) extreme ease-of-use for user code. It attempts to provide a higher-level interface than similar projects which expose a variety of low-level event-handling and networking objects to Ruby programs.