On Thu, 2019-05-16 at 07:51 -0700, Rafael Ferreira wrote: > Oleg, I posted the code here: https://github.com/rferreira/hc5 < > https://github.com/rferreira/hc5> with a brief readme on how to > duplicate the issue (I’m still fairly confident this is a > misconfiguration issue on my part). >
Rafael I tweaked your code a little and basically cannot see any resource issues under (moderate) load. https://github.com/ok2c/hc5/commits/master Please let me know if I am missing anything. Cheers Oleg --- ab -k -c 10 -n 10000 http://localhost:8080/ --- Server Software: Apache-HttpCore/5.0-beta7 Server Hostname: localhost Server Port: 8080 Document Path: / Document Length: 0 bytes Concurrency Level: 10 Time taken for tests: 1.064 seconds Complete requests: 10000 Failed requests: 0 Keep-Alive requests: 10000 Total transferred: 1570000 bytes HTML transferred: 0 bytes Requests per second: 9394.14 [#/sec] (mean) Time per request: 1.064 [ms] (mean) Time per request: 0.106 [ms] (mean, across all concurrent requests) Transfer rate: 1440.31 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 0 0 0.0 0 1 Processing: 0 1 3.2 0 89 Waiting: 0 1 3.2 0 89 Total: 0 1 3.2 0 90 --- > Thanks again, > > > > > On May 15, 2019, at 11:12 AM, Oleg Kalnichevski <[email protected]> > > wrote: > > > > On Wed, 2019-05-15 at 09:21 -0700, Rafael Ferreira wrote: > > > 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 > > > > < > > > 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, > > > > Hi Rafael > > > > I could not spot anything obviously wrong with your implementation. > > If > > you add a test case and put your project on Github I will try to > > run it > > under some load and see if I can fix the resource issue. > > > > Generally I would recommend to not use inherently blocking classic > > InputStream / OutputStream APIs with the async protocol handlers > > unless > > there is a very strong reason to do so. > > > > Oleg > > > > > > > > > > > > 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 > > > > > > > > < > > > > > 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 > > > > < > > > > 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 > > > > > > > < > > > > 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]> <mailto: > > > > [email protected] <mailto: > > > > [email protected]>> > > > > For additional commands, e-mail: [email protected] > > > > <mailto:[email protected]> <mailto: > > > > [email protected] <mailto:[email protected]>> > > > > > > ----------------------------------------------------------------- > > ---- > > To unsubscribe, e-mail: [email protected] <mailto: > > [email protected]> > > For additional commands, e-mail: [email protected] <mailto: > > [email protected]> --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
