Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Jakarta-httpclient 
Wiki" for change notification.

The following page has been changed by OlegKalnichevski:
http://wiki.apache.org/jakarta-httpclient/HttpCoreNioApi

New page:
= HttpCore NIO API =

HttpCore NIO is based on the I/O Reactor pattern as described by Doug Lea. 

== Main components ==

=== IOReactor ===

IOReactor represents an I/O multiplexer capable of accepting incoming 
connection, establishing outgoing connection, 
and dispatching read/write notifications. IOReactor maintains a set of active 
sessions and also manages closed sessions. 
IOReactor uses IOEventDispatch in order to communicate with various input 
consumers and output producers.

IOReactor encapsulates java.nio.channel.Selector

=== IOSession ===

IOSession contains a socket channel and maintains a conversational state with 
the opposite side of the connection. 
IOSession usually maintains references to corresponding input consumer and 
output producer and optionally to a protocol 
processor / worker thread.

IOSession encapsulates java.nio.channel.SelectionKey

=== IOEventDispatch ===

IOEventDispatch is a callback interface intended to propagate I/O events to 
various protocol processors. IOEventDispatch 
reflects the life cycle of an IOSession. Through IOEventDispatch IOReactor 
fires events signaling a creation of a new 
session, some input/output activity for an active session or completion of a 
session.

IOEventDispatch serves as a link between the I/O multiplexer and protocol 
processors and is meant to be developed for 
each specific type of application

=== IOConsumer ===

IOConsumer represents any arbitrary process interested in consuming incoming 
data. IOConsumer calls IOSession to signal
its interest in receiving data. IOEventDispatch calls IOConsumer to signal 
availability of input data in the session's socket 
channel. 

IOConsumer maintains a reference to java.nio.channel.ByteChannel

=== IOProducer ===

IOProducer represents any arbitrary process intended to generate outgoing data. 
IOConsumer calls IOSession to signal its 
interest in sending out data. IOEventDispatch calls IOProducer in order to 
signal readiness of the session's socket channel 
to accept output data.

IOProducer maintains a reference to java.nio.channel.ByteChannel

== Examples ==


== HttpCore NIO vs MINA ==

In many ways HttpCore NIO is very similar to MINA. MINA API represents quite 
elegant and natural way of dealing with 
non-blocking I/O and anyone developing a event-driven I/O transport is bound to 
come up with a similar interface. There are 
several significant differences as well. HttpCore NIO reactor is minimalistic, 
bare-bone I/O multiplexer. HttpCore NIO does 
not and will not provide any buffering or threading primitives. It is meant to 
serve as an efficient asynchronous I/O transport 
for HttpCore and nothing else. Input/output buffering is meant to be 
implemented by data receiver / data transmitter 
respectively and development of threading primitives is entirely out of 
HttpCore scope.

If you are interested in supporting multiple protocols on top of a robust, 
flexible and well supported I/O transport mechanism 
'''please use MINA'''. HttpCore runs perfectly well on top of MINA.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to