首页 > 代码库 > Reactor Pattern and Non-blocking IO--reference

Reactor Pattern and Non-blocking IO--reference

reference from:http://www.cs.bgu.ac.il/~spl051/Personal_material/Practical_sessions/Ps_12/ps12.html

  • 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).

 

 

 

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