I see. I fixed this by changing the source code to disable the check
whether the number of concurrent streams is exceed. But anyway thanks a
lot.
BTW: do you think client can send max_concurrent_streams in the settings
frame to tell the server to change this value? Nginx support it while h2o
doesn't support it.
A question related to this:
I tried to make 500 concurrent streams using a for loop. And when the file
I request is big, it may come out such a exception below:
2015-10-21 21:33:03.397:DBUG:oejh.HTTP2Session:qtp1360875712-10: Removed
HTTP2Stream@61009542
#999{sendWindow=2147483647,recvWindow=65525,reset=false,CLOSED}
2015-10-21 21:33:03.397:WARN:oeju.Promise$Adapter:qtp1360875712-10:
java.lang.OutOfMemoryError: Java heap space
at java.nio.HeapByteBuffer.<init>(HeapByteBuffer.java:57)
at java.nio.ByteBuffer.allocate(ByteBuffer.java:335)
at org.eclipse.jetty.util.BufferUtil.allocate(BufferUtil.java:114)
at org.eclipse.jetty.io.MappedByteBufferPool.newByteBuffer(
MappedByteBufferPool.java:70)
at org.eclipse.jetty.io.MappedByteBufferPool.acquire(
MappedByteBufferPool.java:60)
at org.eclipse.jetty.io.ByteBufferPool$Lease.acquire(ByteBufferPool.java:71)
at org.eclipse.jetty.http2.generator.HeadersGenerator.generateHeaders(
HeadersGenerator.java:78)
at org.eclipse.jetty.http2.generator.HeadersGenerator.generate(
HeadersGenerator.java:54)
at org.eclipse.jetty.http2.generator.Generator.control(Generator.java:80)
at org.eclipse.jetty.http2.HTTP2Session$ControlEntry.generate(
HTTP2Session.java:1028)
at org.eclipse.jetty.http2.HTTP2Flusher.process(HTTP2Flusher.java:247)
at org.eclipse.jetty.util.IteratingCallback.processing(
IteratingCallback.java:241)
at org.eclipse.jetty.util.IteratingCallback.iterate(
IteratingCallback.java:224)
at org.eclipse.jetty.http2.HTTP2Session.frame(HTTP2Session.java:607)
at org.eclipse.jetty.http2.HTTP2Session.frames(HTTP2Session.java:581)
at org.eclipse.jetty.http2.BufferingFlowControlStrategy.onDataConsumed(
BufferingFlowControlStrategy.java:144)
at org.eclipse.jetty.http2.HTTP2Session$1.succeeded(HTTP2Session.java:173)
at Client7$1.onData(Client7.java:155)
at org.eclipse.jetty.http2.HTTP2Stream.notifyData(HTTP2Stream.java:362)
at org.eclipse.jetty.http2.HTTP2Stream.onData(HTTP2Stream.java:263)
at org.eclipse.jetty.http2.HTTP2Stream.process(HTTP2Stream.java:208)
at org.eclipse.jetty.http2.HTTP2Session.onData(HTTP2Session.java:168)
at org.eclipse.jetty.http2.parser.BodyParser.notifyData(BodyParser.java:103)
at org.eclipse.jetty.http2.parser.DataBodyParser.onData(
DataBodyParser.java:138)
at org.eclipse.jetty.http2.parser.DataBodyParser.parse(
DataBodyParser.java:103)
at org.eclipse.jetty.http2.parser.Parser.parseBody(Parser.java:186)
at org.eclipse.jetty.http2.parser.Parser.parse(Parser.java:110)
at org.eclipse.jetty.http2.HTTP2Connection$HTTP2Producer.produce(
HTTP2Connection.java:156)
at
org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceAndRun(
ExecuteProduceConsume.java:162)
at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.execute(
ExecuteProduceConsume.java:101)
at org.eclipse.jetty.http2.HTTP2Connection.onFillable(
HTTP2Connection.java:96)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(
AbstractConnection.java:245)
when the client make a request for a small file, this exception may not be
raised I am wondering is it because Jetty has some constraints on it.
2015-10-21 21:26 GMT+08:00 Simone Bordet <[email protected]>:
> Hi,
>
> On Sun, Oct 18, 2015 at 9:49 AM, Muhui Jiang <[email protected]> wrote:
> > Hi,
> >
> > I want to know how to change the max concurrent streams from the client
> > side. I find the default value is 128. I opened the session as follows:
> >
> > FuturePromise<Session> sessionPromise = new FuturePromise<>();
> >
> > client.connect(sslContextFactory, new InetSocketAddress(host, port),
> >
> > new ServerSessionListener.Adapter(), sessionPromise);
>
> This is the client, you should pass just a Session.Listener.Adapter,
> but see below.
>
> > Session session = sessionPromise.get(5, TimeUnit.SECONDS);
> >
> > But it seems there is no method for session to set the maxlocalstream,
> only
> > HTTP/2 session has such a method.
> >
> > Anyone know how to set the value.
>
> Session.Listener has a method called onPreface() that returns a
> Map<Integer, Integer>.
> On the client, onPreface() is called before sending the client
> preface, so you can return a Map<Integer, Integer> that specifies the
> max number of concurrent streams.
> Use SettingsFrame.MAX_CONCURRENT_STREAMS as the key for the value you
> want to set.
>
> --
> Simone Bordet
> ----
> http://cometd.org
> http://webtide.com
> Developer advice, training, services and support
> from the Jetty & CometD experts.
> _______________________________________________
> jetty-users mailing list
> [email protected]
> To change your delivery options, retrieve your password, or unsubscribe
> from this list, visit
> https://dev.eclipse.org/mailman/listinfo/jetty-users
>
_______________________________________________
jetty-users mailing list
[email protected]
To change your delivery options, retrieve your password, or unsubscribe from
this list, visit
https://dev.eclipse.org/mailman/listinfo/jetty-users