[undertow-dev] Async sending of NIO objects thru a ServletOutputStream?
Jim Crossley
jim at crossleys.org
Tue Sep 16 21:18:24 EDT 2014
Stuart Douglas <sdouglas at redhat.com> writes:
[...]
> Yea, we don't have an easy way to just do that transfer at this stage,
> you will need to read into the pooled buffer then write it out.
>
> Is this an async or a blocking transfer? The problem with
> ReadableByteChannel is that it can be a blocking channel, and as a
> result reading from it in the IO thread will result in crappy
> performance.
Because of the way they're using it (with Clojure's core.async library)
I expect the transfer to be async, but I'll verify that with them.
You wouldn't happen to have an example of reading one into and out of a
pooled buffer you could point me to, would you? :)
Jim
On Tue, Sep 16, 2014 at 8:37 PM, Stuart Douglas <sdouglas at redhat.com> wrote:
>
>
> Jim Crossley wrote:
>
>> I actually figured that out, Stuart, thanks. So I have writing a
>> ByteBuffer covered. Any thoughts on handling the ReadableByteChannel?
>> Looking at the Jetty impl, it appears I need to read it into one or more
>> ByteBuffers and then write them out. Should I use the Pooled<ByteBuffer>
>> from the exhange's connection?
>>
>
> Yea, we don't have an easy way to just do that transfer at this stage, you
> will need to read into the pooled buffer then write it out.
>
> Is this an async or a blocking transfer? The problem with
> ReadableByteChannel is that it can be a blocking channel, and as a result
> reading from it in the IO thread will result in crappy performance.
>
> Stuart
>
>
>> Jim
>>
>> On Tue, Sep 16, 2014 at 6:00 PM, Stuart Douglas <sdouglas at redhat.com
>> <mailto:sdouglas at redhat.com>> wrote:
>>
>>
>>
>> Jim Crossley wrote:
>>
>> Hi guys,
>>
>> I'm looking to promote Undertow as a preferred alternative to
>> Jetty for
>> the Pedestal [1] framework.
>>
>> One Jetty feature it relies on is the async sending of
>> ByteBuffers and
>> ReadableByteChannels in Jetty's impl of ServletOutputStream [2].
>> Two
>> methods, in particular: sendContent(ByteBuffer, Callback) and
>> sendContent(__ReadableByteChannel, Callback).
>>
>>
>> If you have enabled async mode on the ServletOutputStream then
>> write(ByteBuffer) will write using async IO, and invoke the write
>> listener when done. Basically it will work the same as standard
>> servlet async IO, but with byte buffers.
>>
>> Stuart
>>
>>
>> I was hoping someone might point me in the right direction of
>> replicating this behavior with Undertow's
>> ServletOutputStreamImpl. It
>> does have a write(ByteBuffer) method, but it appears to be
>> blocking. And
>> I was hoping there might be some XNIO abstraction for dealing
>> with the
>> ReadableByteChannel, perhaps some example code somewhere?
>>
>> Any and all help/advice is appreciated!
>> Jim
>>
>> [1]: https://github.com/pedestal/__pedestal
>> <https://github.com/pedestal/pedestal>
>> [2]:
>> http://grepcode.com/file/__repo1.maven.org/maven2/org.__
>> eclipse.jetty/jetty-server/9.__2.0.v20140526/org/eclipse/__
>> jetty/server/HttpOutput.java
>> <http://grepcode.com/file/repo1.maven.org/maven2/org.
>> eclipse.jetty/jetty-server/9.2.0.v20140526/org/eclipse/
>> jetty/server/HttpOutput.java>
>>
>> _________________________________________________
>> undertow-dev mailing list
>> undertow-dev at lists.jboss.org <mailto:undertow-dev at lists.jboss.org
>> >
>> https://lists.jboss.org/__mailman/listinfo/undertow-dev
>> <https://lists.jboss.org/mailman/listinfo/undertow-dev>
>>
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/undertow-dev/attachments/20140916/2a5a45d4/attachment.html
More information about the undertow-dev
mailing list