websocket

package module
v0.0.0-...-db0a5b5 Latest Latest
Warning

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

Go to latest
Published: Jan 31, 2024 License: MIT Imports: 21 Imported by: 0

README

Websocket

什么是WebSocket?

WebSocket 协议主要为了解决基于 HTTP/1.x 的 Web 应用无法实现服务端向客户端主动推送的问题, 为了兼容现有的设施, WebSocket 协议使用与 HTTP 协议相同的端口, 并使用 HTTP Upgrade 机制来进行 WebSocket 握手, 当握手完成之后, 通信双方便可以按照 WebSocket 协议的方式进行交互

WebSocket 使用 TCP 作为传输层协议, 与 HTTP 类似, WebSocket 也支持在 TCP 上层引入 TLS 层, 以建立加密数据传输通道, 即 WebSocket over TLS, WebSocket 的 URI 与 HTTP URI 的结构类似, 对于使用 80 端口的 WebSocket over TCP, 其 URI 的一般形式为 ws://host:port/path/query 对于使用 443 端口的 WebSocket over TLS, 其 URI 的一般形式为 wss://host:port/path/query

在 WebSocket 协议中, 帧 (frame) 是通信双方数据传输的基本单元, 与其它网络协议相同, frame 由 Header 和 Payload 两部分构成, frame 有多种类型, frame 的类型由其头部的 Opcode 字段 (将在下面讨论) 来指示, WebSocket 的 frame 可以分为两类, 一类是用于传输控制信息的 frame (如通知对方关闭 WebSocket 连接), 一类是用于传输应用数据的 frame, 使用 WebSocket 协议通信的双方都需要首先进行握手, 只有当握手成功之后才开始使用 frame 传输数据

参考资料

Documentation

Index

Constants

View Source
const (
	PayloadTypeBinary = 0
	PayloadTypeText   = 1
)
View Source
const (
	KindWebsocket transport.Kind = "websocket"
)

Variables

This section is empty.

Functions

func LogDebug

func LogDebug(args ...interface{})

func LogDebugf

func LogDebugf(format string, args ...interface{})

func LogError

func LogError(args ...interface{})

func LogErrorf

func LogErrorf(format string, args ...interface{})

func LogFatal

func LogFatal(args ...interface{})

func LogFatalf

func LogFatalf(format string, args ...interface{})

func LogInfo

func LogInfo(args ...interface{})

func LogInfof

func LogInfof(format string, args ...interface{})

func LogWarn

func LogWarn(args ...interface{})

func LogWarnf

func LogWarnf(format string, args ...interface{})

func Marshal

func Marshal(codec encoding.Codec, msg Any) ([]byte, error)

func RegisterClientMessageHandler

func RegisterClientMessageHandler[T any](cli *Client, messageType MessageType, handler func(*T) error)

func RegisterServerMessageHandler

func RegisterServerMessageHandler[T any](srv *Server, messageType MessageType, handler func(SessionID, *T) error)

func SetOperation

func SetOperation(ctx context.Context, op string)

SetOperation sets the transport operation.

func Unmarshal

func Unmarshal(codec encoding.Codec, inputData []byte, outValue interface{}) error

Types

type Any

type Any interface{}

type BinaryMessage

type BinaryMessage struct {
	Type MessageType
	Body []byte
}

func (*BinaryMessage) Marshal

func (m *BinaryMessage) Marshal() ([]byte, error)

func (*BinaryMessage) Unmarshal

func (m *BinaryMessage) Unmarshal(buf []byte) error

type Binder

type Binder func() Any

type Client

type Client struct {
	// contains filtered or unexported fields
}

func NewClient

func NewClient(opts ...ClientOption) *Client

func (*Client) Connect

func (c *Client) Connect() error

func (*Client) DeregisterMessageHandler

func (c *Client) DeregisterMessageHandler(messageType MessageType)

func (*Client) Disconnect

func (c *Client) Disconnect()

func (*Client) RegisterMessageHandler

func (c *Client) RegisterMessageHandler(messageType MessageType, handler ClientMessageHandler, binder Binder)

func (*Client) SendMessage

func (c *Client) SendMessage(messageType MessageType, message interface{}) error

type ClientHandlerData

type ClientHandlerData struct {
	Handler ClientMessageHandler
	Binder  Binder
}

type ClientMessageHandler

type ClientMessageHandler func(MessagePayload) error

type ClientMessageHandlerMap

type ClientMessageHandlerMap map[MessageType]*ClientHandlerData

type ClientOption

type ClientOption func(o *Client)

func WithClientCodec

func WithClientCodec(c string) ClientOption

func WithClientPayloadType

func WithClientPayloadType(payloadType PayloadType) ClientOption

func WithEndpoint

func WithEndpoint(uri string) ClientOption

type ConnectHandler

type ConnectHandler func(SessionID, bool)

type HandlerData

type HandlerData struct {
	Handler MessageHandler
	Binder  Binder
}

type MessageHandler

type MessageHandler func(SessionID, MessagePayload) error

type MessageHandlerMap

type MessageHandlerMap map[MessageType]*HandlerData

type MessagePayload

type MessagePayload Any

type MessageType

type MessageType uint32

type PayloadType

type PayloadType uint8

type Server

type Server struct {
	*http.Server
	// contains filtered or unexported fields
}

func NewServer

func NewServer(opts ...ServerOption) *Server

func (*Server) Broadcast

func (s *Server) Broadcast(messageType MessageType, message MessagePayload)

func (*Server) DeregisterMessageHandler

func (s *Server) DeregisterMessageHandler(messageType MessageType)

func (*Server) Endpoint

func (s *Server) Endpoint() (*url.URL, error)

func (*Server) Name

func (s *Server) Name() string

func (*Server) RegisterMessageHandler

func (s *Server) RegisterMessageHandler(messageType MessageType, handler MessageHandler, binder Binder)

func (*Server) SendMessage

func (s *Server) SendMessage(sessionId SessionID, messageType MessageType, message MessagePayload)

func (*Server) SessionCount

func (s *Server) SessionCount() int

func (*Server) Start

func (s *Server) Start(ctx context.Context) error

func (*Server) Stop

func (s *Server) Stop(ctx context.Context) error

type ServerOption

type ServerOption func(o *Server)

func WithAddress

func WithAddress(addr string) ServerOption

func WithChannelBufferSize

func WithChannelBufferSize(size int) ServerOption

func WithCodec

func WithCodec(c string) ServerOption

func WithConnectHandle

func WithConnectHandle(h ConnectHandler) ServerOption

func WithListener

func WithListener(lis net.Listener) ServerOption

func WithNetwork

func WithNetwork(network string) ServerOption

func WithPath

func WithPath(path string) ServerOption

func WithPayloadType

func WithPayloadType(payloadType PayloadType) ServerOption

func WithTLSConfig

func WithTLSConfig(c *tls.Config) ServerOption

func WithTimeout

func WithTimeout(timeout time.Duration) ServerOption

type Session

type Session struct {
	// contains filtered or unexported fields
}

func NewSession

func NewSession(conn *ws.Conn, server *Server) *Session

func (*Session) Close

func (c *Session) Close()

func (*Session) Conn

func (c *Session) Conn() *ws.Conn

func (*Session) Listen

func (c *Session) Listen()

func (*Session) SendMessage

func (c *Session) SendMessage(message []byte)

func (*Session) SessionID

func (c *Session) SessionID() SessionID

type SessionID

type SessionID string

type SessionManager

type SessionManager struct {
	// contains filtered or unexported fields
}

func NewSessionManager

func NewSessionManager() *SessionManager

func (*SessionManager) Add

func (s *SessionManager) Add(c *Session)

func (*SessionManager) Clean

func (s *SessionManager) Clean()

func (*SessionManager) Count

func (s *SessionManager) Count() int

func (*SessionManager) Get

func (s *SessionManager) Get(sessionId SessionID) (*Session, bool)

func (*SessionManager) Range

func (s *SessionManager) Range(fn func(*Session))

func (*SessionManager) RegisterConnectHandler

func (s *SessionManager) RegisterConnectHandler(handler ConnectHandler)

func (*SessionManager) Remove

func (s *SessionManager) Remove(c *Session)

type SessionMap

type SessionMap map[SessionID]*Session

type TextMessage

type TextMessage struct {
	Type MessageType `json:"type" xml:"type"`
	Body string      `json:"body" xml:"body"`
}

func (*TextMessage) Marshal

func (m *TextMessage) Marshal() ([]byte, error)

func (*TextMessage) Unmarshal

func (m *TextMessage) Unmarshal(buf []byte) error

type Transport

type Transport struct {
	// contains filtered or unexported fields
}

Transport is a websocket transport.

func (*Transport) Endpoint

func (tr *Transport) Endpoint() string

Endpoint returns the transport endpoint.

func (*Transport) Kind

func (tr *Transport) Kind() transport.Kind

Kind returns the transport kind.

func (*Transport) Operation

func (tr *Transport) Operation() string

Operation returns the transport operation.

func (*Transport) PathTemplate

func (tr *Transport) PathTemplate() string

PathTemplate returns the http path template.

func (*Transport) ReplyHeader

func (tr *Transport) ReplyHeader() transport.Header

ReplyHeader returns the reply header.

func (*Transport) Request

func (tr *Transport) Request() *http.Request

Request returns the HTTP request.

func (*Transport) RequestHeader

func (tr *Transport) RequestHeader() transport.Header

RequestHeader returns the request header.

type Transporter

type Transporter interface {
	transport.Transporter
	Request() *http.Request
	PathTemplate() string
}

Jump to

Keyboard shortcuts

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