Hi Oleg and thanks for the response and offer to help, that’s extremely gracious of you.
I was able to make some progress and get some things sort of working, here’s my latest iteration: https://gist.github.com/rferreira/76434c01dfa1d5bf4e98976b573fc604 <https://gist.github.com/rferreira/76434c01dfa1d5bf4e98976b573fc604> The good is that it works and responds to HTTP requests as well as parses bodies but I’m still running into an odd issue. It appears that there is a resource leak somewhere that causes the server to stop working after a few thousand requests. My theory is that the entity parsing is not properly closing the input stream but I’m unsure of both the efficiency of how I’m parsing it as well as where I would force a resource to be closed. Another question is that I noticed that the HttpRequest implementation that contains a http entity has been renamed ClassicHttpRequest and that leads me to believe that you would like to discourage its usage, if that’s the case, how would you suggest one encapsulates a HttpRequest that has a body? For clarity, my goal here is to build a purposely simple HTTP server well suited for micro service usage in a resource constrained environment. The surface API I want to expose out to consumers would be something like: public HttpResponse handle(HttpRequest, HttpContext) {} and most of the inbound requests would be multipart form posts used for simple RPC. Thanks again, > On May 14, 2019, at 12:06 PM, Oleg Kalnichevski <[email protected]> wrote: > > On Tue, 2019-05-14 at 07:51 -0700, Rafael Ferreira wrote: >> Howdy folks and apologies in advance if the information I’m looking >> for is available somewhere and I simply missed it. >> >> I’m trying to expand the example file server available here ( >> https://github.com/apache/httpcomponents-core/blob/master/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/examples/Http2FileServerExample.java >> >> <https://github.com/apache/httpcomponents-core/blob/master/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/examples/Http2FileServerExample.java> >> < >> https://github.com/apache/httpcomponents-core/blob/master/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/examples/Http2FileServerExample.java >> >> <https://github.com/apache/httpcomponents-core/blob/master/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/examples/Http2FileServerExample.java> >>> ) into something that can consume a request with a body (a POST >> request for example) and I’m struggling to make sense of the >> interface abstractions, ideally, I would like to adapt the low level >> async interfaces to the classic HttpRequest/HttpResponse ones. >> >> Can anyone point me in either the direction of a more complex example >> http2 server using hc5 or just more examples of >> AsyncServerRequestHandler implementations? >> >> Big thanks! >> >> - Rafael > > Hi Rafael > > What you might want to do is to start with > AbstractServerExchangeHandler and add custom request processing and > response generation logic > > https://github.com/apache/httpcomponents-core/blob/master/httpcore5/src/main/java/org/apache/hc/core5/http/nio/support/AbstractServerExchangeHandler.java > > <https://github.com/apache/httpcomponents-core/blob/master/httpcore5/src/main/java/org/apache/hc/core5/http/nio/support/AbstractServerExchangeHandler.java> > > There is a project containing non-blocking (reactive) JSON message > processors with plenty of examples of fairly complex request consumers > and response producers. > > https://github.com/ok2c/httpcomponents-jackson/tree/master/hc5-async-json/src/main/java/com/ok2c/hc5/json/http > > <https://github.com/ok2c/httpcomponents-jackson/tree/master/hc5-async-json/src/main/java/com/ok2c/hc5/json/http> > > Does this help in any way? If not, let me know what kind of request > messages your server is supposed to receive, what kind of response > messages it is supposed to send back and I can try and put together a > sample server specifically for such message exchanges. > > Oleg > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > <mailto:[email protected]> > For additional commands, e-mail: [email protected] > <mailto:[email protected]>
