Stuart Douglas <sdouglas@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@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@redhat.com
<mailto:sdouglas@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@lists.jboss.org <mailto:undertow-dev@lists.jboss.org>
        https://lists.jboss.org/__mailman/listinfo/undertow-dev
        <https://lists.jboss.org/mailman/listinfo/undertow-dev>