Improved configurability of stream idle timeout.
This commit is contained in:
parent
75c1322adc
commit
c07ea68b51
|
@ -37,7 +37,7 @@ public class HTTP2ClientSession extends HTTP2Session
|
||||||
|
|
||||||
public HTTP2ClientSession(Scheduler scheduler, EndPoint endPoint, Generator generator, Listener listener, FlowControl flowControl)
|
public HTTP2ClientSession(Scheduler scheduler, EndPoint endPoint, Generator generator, Listener listener, FlowControl flowControl)
|
||||||
{
|
{
|
||||||
super(scheduler, endPoint, generator, listener, flowControl, -1, 1);
|
super(scheduler, endPoint, generator, listener, flowControl, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -74,9 +74,10 @@ public abstract class HTTP2Session implements ISession, Parser.Listener
|
||||||
private final HTTP2Flusher flusher;
|
private final HTTP2Flusher flusher;
|
||||||
private int maxLocalStreams;
|
private int maxLocalStreams;
|
||||||
private int maxRemoteStreams;
|
private int maxRemoteStreams;
|
||||||
|
private long streamIdleTimeout;
|
||||||
private boolean pushEnabled;
|
private boolean pushEnabled;
|
||||||
|
|
||||||
public HTTP2Session(Scheduler scheduler, EndPoint endPoint, Generator generator, Listener listener, FlowControl flowControl, int maxStreams, int initialStreamId)
|
public HTTP2Session(Scheduler scheduler, EndPoint endPoint, Generator generator, Listener listener, FlowControl flowControl, int initialStreamId)
|
||||||
{
|
{
|
||||||
this.scheduler = scheduler;
|
this.scheduler = scheduler;
|
||||||
this.endPoint = endPoint;
|
this.endPoint = endPoint;
|
||||||
|
@ -84,9 +85,10 @@ public abstract class HTTP2Session implements ISession, Parser.Listener
|
||||||
this.listener = listener;
|
this.listener = listener;
|
||||||
this.flowControl = flowControl;
|
this.flowControl = flowControl;
|
||||||
this.flusher = new HTTP2Flusher(this);
|
this.flusher = new HTTP2Flusher(this);
|
||||||
this.maxLocalStreams = maxStreams;
|
this.maxLocalStreams = -1;
|
||||||
this.maxRemoteStreams = maxStreams;
|
this.maxRemoteStreams = -1;
|
||||||
this.streamIds.set(initialStreamId);
|
this.streamIds.set(initialStreamId);
|
||||||
|
this.streamIdleTimeout = endPoint.getIdleTimeout();
|
||||||
this.sendWindow.set(FlowControl.DEFAULT_WINDOW_SIZE);
|
this.sendWindow.set(FlowControl.DEFAULT_WINDOW_SIZE);
|
||||||
this.recvWindow.set(FlowControl.DEFAULT_WINDOW_SIZE);
|
this.recvWindow.set(FlowControl.DEFAULT_WINDOW_SIZE);
|
||||||
this.pushEnabled = true; // SPEC: by default, push is enabled.
|
this.pushEnabled = true; // SPEC: by default, push is enabled.
|
||||||
|
@ -97,6 +99,16 @@ public abstract class HTTP2Session implements ISession, Parser.Listener
|
||||||
return flowControl;
|
return flowControl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getMaxLocalStreams()
|
||||||
|
{
|
||||||
|
return maxLocalStreams;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMaxLocalStreams(int maxLocalStreams)
|
||||||
|
{
|
||||||
|
this.maxLocalStreams = maxLocalStreams;
|
||||||
|
}
|
||||||
|
|
||||||
public int getMaxRemoteStreams()
|
public int getMaxRemoteStreams()
|
||||||
{
|
{
|
||||||
return maxRemoteStreams;
|
return maxRemoteStreams;
|
||||||
|
@ -107,6 +119,16 @@ public abstract class HTTP2Session implements ISession, Parser.Listener
|
||||||
this.maxRemoteStreams = maxRemoteStreams;
|
this.maxRemoteStreams = maxRemoteStreams;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public long getStreamIdleTimeout()
|
||||||
|
{
|
||||||
|
return streamIdleTimeout;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStreamIdleTimeout(long streamIdleTimeout)
|
||||||
|
{
|
||||||
|
this.streamIdleTimeout = streamIdleTimeout;
|
||||||
|
}
|
||||||
|
|
||||||
public EndPoint getEndPoint()
|
public EndPoint getEndPoint()
|
||||||
{
|
{
|
||||||
return endPoint;
|
return endPoint;
|
||||||
|
@ -553,7 +575,7 @@ public abstract class HTTP2Session implements ISession, Parser.Listener
|
||||||
IStream stream = newStream(streamId);
|
IStream stream = newStream(streamId);
|
||||||
if (streams.putIfAbsent(streamId, stream) == null)
|
if (streams.putIfAbsent(streamId, stream) == null)
|
||||||
{
|
{
|
||||||
stream.setIdleTimeout(endPoint.getIdleTimeout());
|
stream.setIdleTimeout(getStreamIdleTimeout());
|
||||||
flowControl.onNewStream(stream);
|
flowControl.onNewStream(stream);
|
||||||
if (LOG.isDebugEnabled())
|
if (LOG.isDebugEnabled())
|
||||||
LOG.debug("Created local {}", stream);
|
LOG.debug("Created local {}", stream);
|
||||||
|
@ -588,7 +610,7 @@ public abstract class HTTP2Session implements ISession, Parser.Listener
|
||||||
if (streams.putIfAbsent(streamId, stream) == null)
|
if (streams.putIfAbsent(streamId, stream) == null)
|
||||||
{
|
{
|
||||||
updateLastStreamId(streamId);
|
updateLastStreamId(streamId);
|
||||||
stream.setIdleTimeout(endPoint.getIdleTimeout());
|
stream.setIdleTimeout(getStreamIdleTimeout());
|
||||||
flowControl.onNewStream(stream);
|
flowControl.onNewStream(stream);
|
||||||
if (LOG.isDebugEnabled())
|
if (LOG.isDebugEnabled())
|
||||||
LOG.debug("Created remote {}", stream);
|
LOG.debug("Created remote {}", stream);
|
||||||
|
|
|
@ -82,7 +82,13 @@ public abstract class AbstractHTTP2ServerConnectionFactory extends AbstractConne
|
||||||
|
|
||||||
Generator generator = new Generator(connector.getByteBufferPool(), getMaxHeaderTableSize());
|
Generator generator = new Generator(connector.getByteBufferPool(), getMaxHeaderTableSize());
|
||||||
HTTP2ServerSession session = new HTTP2ServerSession(connector.getScheduler(), endPoint, generator, listener,
|
HTTP2ServerSession session = new HTTP2ServerSession(connector.getScheduler(), endPoint, generator, listener,
|
||||||
new HTTP2FlowControl(getInitialStreamWindow()), getMaxConcurrentStreams());
|
new HTTP2FlowControl(getInitialStreamWindow()));
|
||||||
|
session.setMaxLocalStreams(getMaxConcurrentStreams());
|
||||||
|
session.setMaxRemoteStreams(getMaxConcurrentStreams());
|
||||||
|
long idleTimeout = endPoint.getIdleTimeout();
|
||||||
|
if (idleTimeout > 0)
|
||||||
|
idleTimeout /= 2;
|
||||||
|
session.setStreamIdleTimeout(idleTimeout);
|
||||||
|
|
||||||
Parser parser = newServerParser(connector.getByteBufferPool(), session);
|
Parser parser = newServerParser(connector.getByteBufferPool(), session);
|
||||||
HTTP2Connection connection = new HTTP2ServerConnection(connector.getByteBufferPool(), connector.getExecutor(),
|
HTTP2Connection connection = new HTTP2ServerConnection(connector.getByteBufferPool(), connector.getExecutor(),
|
||||||
|
|
|
@ -47,9 +47,9 @@ public class HTTP2ServerSession extends HTTP2Session implements ServerParser.Lis
|
||||||
|
|
||||||
private final ServerSessionListener listener;
|
private final ServerSessionListener listener;
|
||||||
|
|
||||||
public HTTP2ServerSession(Scheduler scheduler, EndPoint endPoint, Generator generator, ServerSessionListener listener, FlowControl flowControl, int maxStreams)
|
public HTTP2ServerSession(Scheduler scheduler, EndPoint endPoint, Generator generator, ServerSessionListener listener, FlowControl flowControl)
|
||||||
{
|
{
|
||||||
super(scheduler, endPoint, generator, listener, flowControl, maxStreams, 2);
|
super(scheduler, endPoint, generator, listener, flowControl, 2);
|
||||||
this.listener = listener;
|
this.listener = listener;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue