public class HttpStreamsClientHandler
extends io.netty.channel.ChannelDuplexHandler
StreamedHttpRequest
messages into HttpRequest
messages
followed by HttpContent
messages and reads HttpResponse
messages followed by
HttpContent
messages and produces StreamedHttpResponse
messages.
This allows request and response bodies to be handled using reactive streams.
There are two types of messages that this handler accepts for writing, StreamedHttpRequest
and
FullHttpRequest
. Writing any other messages may potentially lead to HTTP message mangling.
There are two types of messages that this handler will send down the chain, StreamedHttpResponse
,
and FullHttpResponse
. If ChannelOption.AUTO_READ
is false for the channel,
then any StreamedHttpResponse
messages must be subscribed to consume the body, otherwise
it's possible that no read will be done of the messages.
As long as messages are returned in the order that they arrive, this handler implicitly supports HTTP
pipelining.
This class contains source imported from https://github.com/playframework/netty-reactive-streams,
licensed under the Apache License 2.0, available at the time of the fork (1/31/2020) here:
https://github.com/playframework/netty-reactive-streams/blob/master/LICENSE.txt
All original source licensed under the Apache License 2.0 by playframework. All modifications are
licensed under the Apache License 2.0 by Amazon Web Services.Constructor and Description |
---|
HttpStreamsClientHandler() |
Modifier and Type | Method and Description |
---|---|
protected void |
bodyRequested(io.netty.channel.ChannelHandlerContext ctx)
Invoked every time a read of the incoming body is requested by the subscriber.
|
void |
channelRead(io.netty.channel.ChannelHandlerContext ctx,
Object msg) |
void |
channelReadComplete(io.netty.channel.ChannelHandlerContext ctx) |
void |
close(io.netty.channel.ChannelHandlerContext ctx,
io.netty.channel.ChannelPromise future) |
protected void |
consumedInMessage(io.netty.channel.ChannelHandlerContext ctx)
Invoked when an incoming message is fully consumed.
|
protected io.netty.handler.codec.http.HttpResponse |
createEmptyMessage(io.netty.handler.codec.http.HttpResponse response)
Create an empty incoming message.
|
protected io.netty.handler.codec.http.HttpResponse |
createStreamedMessage(io.netty.handler.codec.http.HttpResponse response,
org.reactivestreams.Publisher<io.netty.handler.codec.http.HttpContent> stream)
Create a streamed incoming message with the given stream.
|
protected boolean |
hasBody(io.netty.handler.codec.http.HttpResponse response)
Whether the given incoming message has a body.
|
protected void |
receivedInMessage(io.netty.channel.ChannelHandlerContext ctx)
Invoked when an incoming message is first received.
|
protected void |
receivedOutMessage(io.netty.channel.ChannelHandlerContext ctx)
Invoked when an outgoing message is first received.
|
protected void |
sentOutMessage(io.netty.channel.ChannelHandlerContext ctx)
Invoked when an outgoing message is fully sent.
|
protected void |
subscribeSubscriberToStream(StreamedHttpMessage msg,
org.reactivestreams.Subscriber<io.netty.handler.codec.http.HttpContent> subscriber)
Subscribe the given subscriber to the given streamed message.
|
protected void |
unbufferedWrite(io.netty.channel.ChannelHandlerContext ctx,
software.amazon.awssdk.http.nio.netty.internal.nrs.HttpStreamsHandler.Outgoing out) |
void |
write(io.netty.channel.ChannelHandlerContext ctx,
Object msg,
io.netty.channel.ChannelPromise promise) |
bind, connect, deregister, disconnect, flush, read
channelActive, channelInactive, channelRegistered, channelUnregistered, channelWritabilityChanged, exceptionCaught, userEventTriggered
ensureNotSharable, handlerAdded, handlerRemoved, isSharable
protected boolean hasBody(io.netty.handler.codec.http.HttpResponse response)
public void close(io.netty.channel.ChannelHandlerContext ctx, io.netty.channel.ChannelPromise future) throws Exception
close
in interface io.netty.channel.ChannelOutboundHandler
close
in class io.netty.channel.ChannelDuplexHandler
Exception
protected void consumedInMessage(io.netty.channel.ChannelHandlerContext ctx)
protected void receivedOutMessage(io.netty.channel.ChannelHandlerContext ctx)
protected void sentOutMessage(io.netty.channel.ChannelHandlerContext ctx)
protected io.netty.handler.codec.http.HttpResponse createEmptyMessage(io.netty.handler.codec.http.HttpResponse response)
protected io.netty.handler.codec.http.HttpResponse createStreamedMessage(io.netty.handler.codec.http.HttpResponse response, org.reactivestreams.Publisher<io.netty.handler.codec.http.HttpContent> stream)
protected void subscribeSubscriberToStream(StreamedHttpMessage msg, org.reactivestreams.Subscriber<io.netty.handler.codec.http.HttpContent> subscriber)
public void channelRead(io.netty.channel.ChannelHandlerContext ctx, Object msg) throws Exception
channelRead
in interface io.netty.channel.ChannelInboundHandler
Exception
protected void receivedInMessage(io.netty.channel.ChannelHandlerContext ctx)
protected void bodyRequested(io.netty.channel.ChannelHandlerContext ctx)
public void channelReadComplete(io.netty.channel.ChannelHandlerContext ctx) throws Exception
channelReadComplete
in interface io.netty.channel.ChannelInboundHandler
channelReadComplete
in class io.netty.channel.ChannelInboundHandlerAdapter
Exception
public void write(io.netty.channel.ChannelHandlerContext ctx, Object msg, io.netty.channel.ChannelPromise promise) throws Exception
write
in interface io.netty.channel.ChannelOutboundHandler
write
in class io.netty.channel.ChannelDuplexHandler
Exception
protected void unbufferedWrite(io.netty.channel.ChannelHandlerContext ctx, software.amazon.awssdk.http.nio.netty.internal.nrs.HttpStreamsHandler.Outgoing out)
Copyright © 2023. All rights reserved.