Skip to content

x/net/http2: access to maxConcurrentStreams #17265

Closed
@nathany

Description

@nathany

What version of Go are you using (go version)?

go version go1.7.1 darwin/amd64

What operating system and processor architecture are you using (go env)?

GOARCH="amd64"
GOOS="darwin"

What did you do?

I am working on an HTTP/2 client for Apple's push notification service. When using JWT tokens to authenticate, Apple initially sends maxConcurrentStreams = 1. Once authentication is complete they send maxConcurrentStreams = 500 (though this number may vary).

Currently I have a worker pool to send multiple requests concurrently. If I could monitor the maxConcurrentStreams, I would know how big the worker pool should be -- or how many workers should be active.

What did you expect to see?

Access to maxConcurrentStreams via httptrace or some other x/net/http2 API.

https://github.com/golang/net/blob/master/http2/transport.go#L1735

Possibly related: #13774

What did you see instead?

If I send more requests than maxConcurrentStreams dictates

With Go 1.7.1 http.DefaultClient I am getting the following error.

http2: server sent GOAWAY and closed the connection; LastStreamID=1, ErrCode=REFUSED_STREAM, 
debug="Maximum active streams violated for this endpoint."

With the latest x/net/http2 I'm getting slightly different errors (still looking into these).

2016/09/28 10:14:43 (9) device: [my-token], error: Post https://api.development.push.apple.com/3/device/[my-token]: 
http2: no cached connection was available

and

2016/09/28 10:14:43 (11) device: [my-token], 
error: invalid character 'M' looking for beginning of value

In any case, the best I can do is prime the connection with a single request, and then send some number of concurrent requests, but not really knowing how many I can send.

Metadata

Metadata

Assignees

No one assigned

    Labels

    SuggestedIssues that may be good for new contributors looking for work to do.help wanted

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions