Oleg, that’s excellent and much appreciated, I’ll review your notes on the 
ticket as well. 

> On May 19, 2019, at 4:10 AM, Oleg Kalnichevski <[email protected]> wrote:
> 
> 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> <
>> 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 
> <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/ <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>
>>>>> <
>>>> 
> 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
>>>> 
>>>>>> <
>>>>>> 
> 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
>>>>> <
>>>>> 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>
>>>> 
>>>>> <
>>>>> 
> 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]>> 
>>>>> <mailto:
>>>>> [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]>> <mailto:
>>>>> [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]

Reply via email to