Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This introduces the concept of domain sharding. It's a workaround for certain clients that have a network setup that disallows use of HTTP2/3. In applications such as the sanity studio, there may be many open network requests at the same time (listeners, queries, mutations etc) which poses a problem when HTTP1 is used, which has a maximum of 6 connections per hostname.
By spreading requests over a number of hostnames (
:projectId.api.r[1-9].sanity.io
), we can work around that limitation. Note that this prevents any auth cookie from being attached to the request - if you need auth, you'll have to use the authorization header (through thetoken
parameter).We use a "global" sharder singleton instance to avoid multiple different clients having separate buckets and ending up with one bucket being "filled up" because of an unshared state.
Had to take a few shortcuts in the tests here - ideally this would only be applied in browser environments, but couldn't find a great way to do so. We can refactor later if we find a workaround, but it shouldn't be a blocker.
Note that this is implemented primarily as a get-it middleware, but because the
listen
code-path does not use get-it under the hood, it has a separate, manual tracking implementation.Note: the shard domains may not be up and running yet.