For what it is worth to you.
You could base your client side HTTP code on the asynchronous version of HttpClient  which would relieve the tedium of having to deal with the non-blocking SSL (which is enormously painful), persistent connection management, and similar low level stuff and help cut down on the amount of HTTP protocol specific code quite dramatically. HttpAsyncClient is also based on HttpCore NIO so migration should be fairly straightforward.
As far as performance is concerned, it is perfectly expectable for a NIO based transport to be ~25% slower in terms of raw throughput than a similar one based on the classic (blocking) I/O model. Thread context switching in modern JREs tends to be faster than selector based channel multiplexing.