Source File
writesched_common.go
Belonging Package
golang.org/x/net/http2
// Copyright 2026 The Go Authors. All rights reserved.// Use of this source code is governed by a BSD-style// license that can be found in the LICENSE file.package http2// WriteScheduler is the interface implemented by HTTP/2 write schedulers.// Methods are never called concurrently.//// Deprecated: User-provided write schedulers are deprecated.type WriteScheduler interface {// OpenStream opens a new stream in the write scheduler.// It is illegal to call this with streamID=0 or with a streamID that is// already open -- the call may panic.OpenStream(streamID uint32, options OpenStreamOptions)// CloseStream closes a stream in the write scheduler. Any frames queued on// this stream should be discarded. It is illegal to call this on a stream// that is not open -- the call may panic.CloseStream(streamID uint32)// AdjustStream adjusts the priority of the given stream. This may be called// on a stream that has not yet been opened or has been closed. Note that// RFC 7540 allows PRIORITY frames to be sent on streams in any state. See:// https://tools.ietf.org/html/rfc7540#section-5.1AdjustStream(streamID uint32, priority PriorityParam)// Push queues a frame in the scheduler. In most cases, this will not be// called with wr.StreamID()!=0 unless that stream is currently open. The one// exception is RST_STREAM frames, which may be sent on idle or closed streams.Push(wr FrameWriteRequest)// Pop dequeues the next frame to write. Returns false if no frames can// be written. Frames with a given wr.StreamID() are Pop'd in the same// order they are Push'd, except RST_STREAM frames. No frames should be// discarded except by CloseStream.Pop() (wr FrameWriteRequest, ok bool)}// OpenStreamOptions specifies extra options for WriteScheduler.OpenStream.//// Deprecated: User-provided write schedulers are deprecated.type OpenStreamOptions struct {// PusherID is zero if the stream was initiated by the client. Otherwise,// PusherID names the stream that pushed the newly opened stream.PusherID uint32// priority is used to set the priority of the newly opened stream.priority PriorityParam}// PriorityWriteSchedulerConfig configures a priorityWriteScheduler.//// Deprecated: User-provided write schedulers are deprecated.type PriorityWriteSchedulerConfig struct {// MaxClosedNodesInTree controls the maximum number of closed streams to// retain in the priority tree. Setting this to zero saves a small amount// of memory at the cost of performance.//// See RFC 7540, Section 5.3.4:// "It is possible for a stream to become closed while prioritization// information ... is in transit. ... This potentially creates suboptimal// prioritization, since the stream could be given a priority that is// different from what is intended. To avoid these problems, an endpoint// SHOULD retain stream prioritization state for a period after streams// become closed. The longer state is retained, the lower the chance that// streams are assigned incorrect or default priority values."MaxClosedNodesInTree int// MaxIdleNodesInTree controls the maximum number of idle streams to// retain in the priority tree. Setting this to zero saves a small amount// of memory at the cost of performance.//// See RFC 7540, Section 5.3.4:// Similarly, streams that are in the "idle" state can be assigned// priority or become a parent of other streams. This allows for the// creation of a grouping node in the dependency tree, which enables// more flexible expressions of priority. Idle streams begin with a// default priority (Section 5.3.5).MaxIdleNodesInTree int// ThrottleOutOfOrderWrites enables write throttling to help ensure that// data is delivered in priority order. This works around a race where// stream B depends on stream A and both streams are about to call Write// to queue DATA frames. If B wins the race, a naive scheduler would eagerly// write as much data from B as possible, but this is suboptimal because A// is a higher-priority stream. With throttling enabled, we write a small// amount of data from B to minimize the amount of bandwidth that B can// steal from A.ThrottleOutOfOrderWrites bool}
The pages are generated with Golds v0.8.4. (GOOS=linux GOARCH=amd64)