[
https://issues.apache.org/jira/browse/HTTPCORE-148?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Sam Berlin updated HTTPCORE-148:
--------------------------------
Attachment: changes.txt
Attached is a final revision of the async service side. There's a slew of
tests in the TestAsyncNHttpHandlers test, which is an integration test for
everything involved in AsyncNHttpServiceHandler. As the client side is fleshed
out, the client side of that test should convert from the buffering handler to
the async handler. All tests pass, and it's pretty slick IMHO.
The general theme of AsyncNHttpServiceHandler is that it provides the best of
both worlds of the buffering & throttling variants. Like the buffering mode,
everything is done in a single thread. Better than the throttling mode,
absolutely nothing is buffered in memory. To support migration from old code,
there's a few delegate classes that act like the buffering & throttling
variants. If the service handler detects an outgoing entity doesn't implement
ProducingNHttpEntity, it will wrap it within a NBlockingProducingNHttpEntity.
That entity will buffer the output entirely in memory. On the incoming side,
in order to support migrating existing HttpRequestHandlers, there's a
NBlockingHttpRequestHandler that the HttpRequestHandler can be wrapped in. If
the service detects the current handler is wrapped, it uses the special
BlockingHandler interface to handle the request, which lets the external
HttpRequestHandler use getContent() and all sorts of blocking methods, also
allowing feedback in the form of exceptions to be processed correctly.
The end result is that the only real change external code has to make in order
to incorporate AsyncNHttpServiceHandler is to register existing
HttpRequestHandlers by wrapping them within an NBlockingHttpRequestHandler (and
still, only if it expected entities and read them with getContent). To make
best use of the service handler, though, it's advised to read incoming entities
as if they were ConsumingNHttpEntities, and provide outgoing entities that
implement ProducingNHttpEntity. There's an AsyncNHttpFileServer example that
shows how easy it is to write up a single-threaded file server.
Thanks!
> Create AsyncNHttpServiceHandler & AsyncNHttpClientHandler
> ---------------------------------------------------------
>
> Key: HTTPCORE-148
> URL: https://issues.apache.org/jira/browse/HTTPCORE-148
> Project: HttpComponents Core
> Issue Type: New Feature
> Components: HttpCore NIO
> Affects Versions: 4.0-beta2
> Reporter: Sam Berlin
> Attachments: changes.txt
>
>
> Attached is a patch (minus tests right now) for AsyncNHttpServiceHandler. It
> actually works (as tested by running & hitting it with IE.) :)
> To test, run the example 'AsyncNHttpFileServer' in the examples directory.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]