Reactor Pattern and Non-blocking IO

·        Java server class with multiple client connections: one-to-one ratio of threads to clients, therefore enormous thread overhead, resulted in performance problems and lack of scalability. The main problem is blocking I/O calls.

·         JDK 1.4 supports non-blocking I/O calls (java.nio and java.nio.channels). These packages were designed principally according to Reactor design pattern (Using Design Patterns to Develop Reusable Object-Oriented Communication Software by Douglas C. Schmidt).

 

 

Reactor Pattern and Non-blocking IO

The actors in Reactor pattern are:

• Handles, which identify resources (such as network connections, open files, and synchronization

objects) that are managed by an operating system.

• Reactor, which defines an interface for registering, removing, and dispatching Event Handler

objects. An implementation of the Reactor interface provides a set of application-independent

event demultiplexing and dispatching mechanisms. These mechanisms dispatch application-specific

Event Handler in response to events occurring on one or more Handles.

• Event Handler, which specifies an interface used by the Reactor to dispatch callback methods

defined by objects that are pre-registered to handle certain types of events (such as input events,

output events, and signals).

• Concrete Event Handler, which implements the customized callback method(s) that process events

in an application-specific manner.

 

Using Reactor in Communication Software

    • Short tutorial
    • Important classes in java.nio.channels:
      • SocketChannel, ServerSocketChannel
      •  Selector (Reactor)
      •  SelectionKey
    • java.nio: ByteBuffer

 

Example

  • Reactor
  • ConnectionAcceptor (Event Handle)
  • ConnectionReader (Event Handle)
  • MessageProcessorTask
  • SimpleClient
  • ThreadPool

 

你可能感兴趣的:(nio,Reactor)