On Tue, 2014-09-16 at 13:49 +0100, Daniel Feist wrote: > Hi, > > Jetty uses a default output buffer of 64KB, although the echo > implementation I referenced works beyond this buffer size too. When the > internal buffer is full it writes to response channel, only closing (and > flushing?) the channel once the request has been fully read and processed > and response written. > > Forgetting Jetty now, playing around more with HttpCore I see this > behaviour when debugging my implementation. Is this right? > > - When the buffer size is smaller that the request body I'm using IoCtrl to > suspend input and request output. > - Because the ContentDecoder is not completed AsyncHttpHandler#handle is > never called and my HttpAsyncResponseProducer never submitted (using > httpexchange.submitResponse). > - As such, when org.apache.http.nio.protocol.HttpAsyncService#responseReady > is called there is no HttpAsyncResponseProducer available. > - Because there is not HttpAsyncResponseProducer available, the buffer is > never read and IoCtrl.requestInput is never called to continue reading the > body. > > I know what i'm trying to implement to learn httpcore may seem kind of > artificial, but i'm struggling to make sense of this behaviour in the > implementation. Or is it simply that this is deliberate because handling > the request and processing the response makes no sense at all until the > request body has been fully read?
Yes, it is deliberate and is based on a conscious design decision. Nothing, however, stops you from tweaking HttpAsyncService to support out of sync responses at the expense of compatibility with blocking HTTP clients. > > Ignoring what i've been playing with, what is the best, most efficient way, > of implementing a AsyncEchoHandler with httpcore? > I would probably opt to just truncate request content after a certain limit. However if your main goal is learning rather than some practical application I would recommend taking your chances with building a custom protocol handler using HttpAsyncService as your starting point. Hope this helps Oleg --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
