websocket

package
v1.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 24, 2023 License: Apache-2.0 Imports: 25 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrUpgradeTokenNotFound .
	ErrUpgradeTokenNotFound = errors.New("websocket: the client is not using the websocket protocol: 'upgrade' token not found in 'Connection' header")

	// ErrUpgradeMethodIsGet .
	ErrUpgradeMethodIsGet = errors.New("websocket: the client is not using the websocket protocol: request method is not GET")

	// ErrUpgradeInvalidWebsocketVersion .
	ErrUpgradeInvalidWebsocketVersion = errors.New("websocket: unsupported version: 13 not found in 'Sec-Websocket-Version' header")

	// ErrUpgradeUnsupportedExtensions .
	ErrUpgradeUnsupportedExtensions = errors.New("websocket: application specific 'Sec-WebSocket-Extensions' headers are unsupported")

	// ErrUpgradeOriginNotAllowed .
	ErrUpgradeOriginNotAllowed = errors.New("websocket: request origin not allowed by Upgrader.CheckOrigin")

	// ErrUpgradeMissingWebsocketKey .
	ErrUpgradeMissingWebsocketKey = errors.New("websocket: not a websocket handshake: 'Sec-WebSocket-Key' header is missing or blank")

	// ErrUpgradeNotHijacker .
	ErrUpgradeNotHijacker = errors.New("websocket: response does not implement http.Hijacker")

	// ErrInvalidControlFrame .
	ErrInvalidControlFrame = errors.New("websocket: invalid control frame")

	// ErrInvalidWriteCalling .
	ErrInvalidWriteCalling = errors.New("websocket: invalid write calling, should call WriteMessage instead")

	// ErrReserveBitSet .
	ErrReserveBitSet = errors.New("websocket: reserved bit set it frame")

	// ErrReservedOpcodeSet .
	ErrReservedOpcodeSet = errors.New("websocket: reserved opcode received")

	// ErrControlMessageFragmented .
	ErrControlMessageFragmented = errors.New("websocket: control messages must not be fragmented")

	// ErrFragmentsShouldNotHaveBinaryOrTextOpcode .
	ErrFragmentsShouldNotHaveBinaryOrTextOpcode = errors.New("websocket: fragments should not have opcode of text or binary")

	// ErrInvalidCloseCode .
	ErrInvalidCloseCode = errors.New("websocket: invalid close code")

	// ErrBadHandshake .
	ErrBadHandshake = errors.New("websocket: bad handshake")

	// ErrInvalidCompression .
	ErrInvalidCompression = errors.New("websocket: invalid compression negotiation")

	// ErrMalformedURL .
	ErrMalformedURL = errors.New("malformed ws or wss URL")

	// ErrMessageTooLarge.
	ErrMessageTooLarge = errors.New("message exceeds the configured limit")

	// ErrMessageSendQuqueIsFull .
	ErrMessageSendQuqueIsFull = errors.New("message send queue is full")
)
View Source
var (
	// DefaultBlockingReadBufferSize .
	DefaultBlockingReadBufferSize = 1024 * 4

	// DefaultBlockingModAsyncWrite .
	DefaultBlockingModAsyncWrite = true

	DefaultBlockingModSendQueueInitSize = 4

	DefaultBlockingModSendQueueMaxSize = 0

	// DefaultEngine will be set to a Upgrader.Engine to handle details such as buffers.
	DefaultEngine = iohttp.NewEngine(iohttp.Config{
		ReleaseWebsocketPayload: true,
	})
)

Functions

func CloseCode

func CloseCode(err error) int

CloseCode .

func CloseReason

func CloseReason(err error) string

CloseReason .

Types

type CloseError

type CloseError struct {
	Code   int
	Reason string
}

CloseError .

func (CloseError) Error

func (ce CloseError) Error() string

Error .

type Conn

type Conn struct {
	net.Conn
	// contains filtered or unexported fields
}

Conn .

func NewConn

func NewConn(u *Upgrader, c net.Conn, subprotocol string, remoteCompressionEnabled bool, asyncWrite bool) *Conn

func (*Conn) BlockingModReadLoop

func (c *Conn) BlockingModReadLoop(bufSize int)

BlockingModReadLoop .

func (*Conn) Close

func (c *Conn) Close() error

Close .

func (*Conn) CloseAndClean

func (c *Conn) CloseAndClean(err error)

CloseAndClean .

func (*Conn) CloseWithError

func (c *Conn) CloseWithError(err error) error

CloseWithError .

func (*Conn) CompressionEnabled

func (c *Conn) CompressionEnabled() bool

CompressionEnabled .

func (*Conn) EnableCompression

func (c *Conn) EnableCompression(enable bool)

EnableCompression .

func (*Conn) EnableWriteCompression

func (c *Conn) EnableWriteCompression(enable bool)

EnableWriteCompression .

func (*Conn) IsAsyncWrite

func (c *Conn) IsAsyncWrite() bool

IsAsyncWrite .

func (*Conn) IsBlockingMod

func (c *Conn) IsBlockingMod() bool

IsBlockingMod .

func (*Conn) OnClose

func (c *Conn) OnClose(h func(*Conn, error))

func (*Conn) OnDataFrame

func (c *Conn) OnDataFrame(h func(*Conn, MessageType, bool, []byte))

OnDataFrame .

func (*Conn) OnMessage

func (c *Conn) OnMessage(h func(*Conn, MessageType, []byte))

OnMessage .

func (*Conn) OnOpen

func (c *Conn) OnOpen(h func(*Conn))

OnOpen .

func (*Conn) Read

func (c *Conn) Read(p *iohttp.Parser, data []byte) error

Read .

func (*Conn) Session

func (c *Conn) Session() interface{}

Session returns user session.

func (*Conn) SetCloseError

func (c *Conn) SetCloseError(err error)

SetCloseError .

func (*Conn) SetCloseHandler

func (c *Conn) SetCloseHandler(h func(*Conn, int, string))

SetCloseHandler .

func (*Conn) SetPingHandler

func (c *Conn) SetPingHandler(h func(*Conn, string))

SetPingHandler .

func (*Conn) SetPongHandler

func (c *Conn) SetPongHandler(h func(*Conn, string))

SetPongHandler .

func (*Conn) SetSession

func (c *Conn) SetSession(session interface{})

SetSession sets user session.

func (*Conn) Subprotocol

func (c *Conn) Subprotocol() string

Subprotocol returns the negotiated websocket subprotocol.

func (*Conn) Write

func (c *Conn) Write(data []byte) (int, error)

Write overwrites Conn.Write.

func (*Conn) WriteClose

func (c *Conn) WriteClose(code int, reason string) error

WriteClose .

func (*Conn) WriteFrame

func (c *Conn) WriteFrame(messageType MessageType, sendOpcode, fin bool, data []byte) error

WriteFrame .

func (*Conn) WriteMessage

func (c *Conn) WriteMessage(messageType MessageType, data []byte) error

WriteMessage .

type Dialer

type Dialer struct {
	Engine *iohttp.Engine

	Upgrader *Upgrader

	Jar http.CookieJar

	DialTimeout time.Duration

	TLSClientConfig *tls.Config

	Proxy func(*http.Request) (*url.URL, error)

	CheckRedirect func(req *http.Request, via []*http.Request) error

	Subprotocols []string

	EnableCompression bool

	Cancel context.CancelFunc
}

Dialer .

func (*Dialer) Dial

func (d *Dialer) Dial(urlStr string, requestHeader http.Header, v ...interface{}) (*Conn, *http.Response, error)

Dial .

func (*Dialer) DialContext

func (d *Dialer) DialContext(ctx context.Context, urlStr string, requestHeader http.Header, v ...interface{}) (*Conn, *http.Response, error)

DialContext .

type MessageType

type MessageType int8

MessageType .

const (
	// FragmentMessage .
	FragmentMessage MessageType = 0 // Must be preceded by Text or Binary message
	// TextMessage .
	TextMessage MessageType = 1
	// BinaryMessage .
	BinaryMessage MessageType = 2
	// CloseMessage .
	CloseMessage MessageType = 8
	// PingMessage .
	PingMessage MessageType = 9
	// PongMessage .
	PongMessage MessageType = 10
)

The message types are defined in RFC 6455, section 11.8.t .

type Upgrader

type Upgrader struct {

	// Subprotocols .
	Subprotocols []string

	// CheckOrigin .
	CheckOrigin func(r *http.Request) bool

	// HandshakeTimeout represents the timeout duration during websocket handshake.
	HandshakeTimeout time.Duration

	// BlockingModReadBufferSize represents the read buffer size of a Conn if it's in blocking mod.
	BlockingModReadBufferSize int

	// BlockingModAsyncWrite represents whether use a goroutine to handle writing:
	// true: use dynamic goroutine to handle writing.
	// false: write buffer to the conn directely.
	BlockingModAsyncWrite bool

	// BlockingModSendQueueInitSize represents the init size of a Conn's send queue,
	// only takes effect when `BlockingModAsyncWrite` is true.
	BlockingModSendQueueInitSize int

	// BlockingModSendQueueInitSize represents the max size of a Conn's send queue,
	// only takes effect when `BlockingModAsyncWrite` is true.
	BlockingModSendQueueMaxSize int
	// contains filtered or unexported fields
}

Upgrader .

func NewUpgrader

func NewUpgrader() *Upgrader

NewUpgrader .

func (*Upgrader) EnableCompression

func (u *Upgrader) EnableCompression(enable bool)

EnableCompression .

func (*Upgrader) OnClose

func (u *Upgrader) OnClose(h func(*Conn, error))

OnClose .

func (*Upgrader) OnDataFrame

func (u *Upgrader) OnDataFrame(h func(*Conn, MessageType, bool, []byte))

OnDataFrame .

func (*Upgrader) OnMessage

func (u *Upgrader) OnMessage(h func(*Conn, MessageType, []byte))

OnMessage .

func (*Upgrader) OnOpen

func (u *Upgrader) OnOpen(h func(*Conn))

OnOpen .

func (*Upgrader) SetCloseHandler

func (u *Upgrader) SetCloseHandler(h func(*Conn, int, string))

SetCloseHandler .

func (*Upgrader) SetCompressionLevel

func (u *Upgrader) SetCompressionLevel(level int) error

SetCompressionLevel .

func (*Upgrader) SetPingHandler

func (u *Upgrader) SetPingHandler(h func(*Conn, string))

SetPingHandler .

func (*Upgrader) SetPongHandler

func (u *Upgrader) SetPongHandler(h func(*Conn, string))

SetPongHandler .

func (*Upgrader) Upgrade

func (u *Upgrader) Upgrade(w http.ResponseWriter, r *http.Request, responseHeader http.Header, args ...interface{}) (*Conn, error)

Upgrade .

func (*Upgrader) UpgradeAndTransferConnToPoller

func (u *Upgrader) UpgradeAndTransferConnToPoller(w http.ResponseWriter, r *http.Request, responseHeader http.Header) (*Conn, error)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL