websocket

package
v1.0.9 Latest Latest
Warning

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

Go to latest
Published: Apr 22, 2025 License: MIT Imports: 9 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrConnectionClosed 连接已关闭错误
	ErrConnectionClosed = errors.New("websocket: 连接已关闭")

	// ErrConnectionNotFound 连接未找到错误
	ErrConnectionNotFound = errors.New("websocket: 连接未找到")

	// ErrInvalidMessage 无效消息错误
	ErrInvalidMessage = errors.New("websocket: 无效的消息")

	// ErrChannelNotFound 频道未找到错误
	ErrChannelNotFound = errors.New("websocket: 频道未找到")

	// DefaultUpgrader 默认的WebSocket升级器
	DefaultUpgrader = websocket.Upgrader{
		ReadBufferSize:  1024,
		WriteBufferSize: 1024,
		CheckOrigin: func(r *http.Request) bool {
			return true
		},
	}
)

Functions

This section is empty.

Types

type Client

type Client struct {
	// URL WebSocket服务器URL
	URL string

	// Connection 当前连接
	Connection *websocket.Conn

	// AuthToken 认证令牌
	AuthToken string

	// Closed 客户端是否已关闭
	Closed bool

	// OnConnect 连接建立回调
	OnConnect func()

	// OnDisconnect 连接断开回调
	OnDisconnect func(err error)

	// OnMessage 接收消息回调
	OnMessage func(msg *Message)

	// OnError 错误回调
	OnError func(err error)

	// MessageHandlers 特定消息类型处理器
	MessageHandlers map[string]func(msg *Message)

	// EventHandlers 特定事件处理器
	EventHandlers map[string]func(msg *Message)

	// ReconnectInterval 重连间隔
	ReconnectInterval time.Duration

	// MaxReconnectAttempts 最大重连尝试次数
	MaxReconnectAttempts int
	// contains filtered or unexported fields
}

Client WebSocket客户端

func NewClient

func NewClient(url string) *Client

NewClient 创建新的WebSocket客户端

func (*Client) Close

func (c *Client) Close()

Close 关闭WebSocket连接

func (*Client) Connect

func (c *Client) Connect() error

Connect 连接到WebSocket服务器

func (*Client) JoinChannel

func (c *Client) JoinChannel(channel string) error

JoinChannel 加入频道

func (*Client) LeaveChannel

func (c *Client) LeaveChannel(channel string) error

LeaveChannel 离开频道

func (*Client) OnEventType

func (c *Client) OnEventType(event string, handler func(msg *Message))

OnEventType 注册特定事件处理器

func (*Client) OnMessageType

func (c *Client) OnMessageType(msgType string, handler func(msg *Message))

OnMessageType 注册特定消息类型处理器

func (*Client) Send

func (c *Client) Send(msg *Message) error

Send 发送消息

func (*Client) SendEvent

func (c *Client) SendEvent(event string, data interface{}) error

SendEvent 发送事件消息

func (*Client) SendToChannel

func (c *Client) SendToChannel(channel string, event string, data interface{}) error

SendToChannel 发送消息到频道

type Connection

type Connection struct {
	// ID 连接唯一标识
	ID string

	// UserID 用户ID,可选
	UserID string

	// Socket 原始WebSocket连接
	Socket *websocket.Conn

	// Manager 所属的管理器
	Manager *Manager

	// Channels 已加入的频道列表
	Channels map[string]bool

	// SendChan 发送消息的通道
	SendChan chan *Message

	// Closed 连接是否已关闭
	Closed bool

	// Metadata 连接元数据,可存储任意信息
	Metadata map[string]interface{}
	// contains filtered or unexported fields
}

Connection WebSocket连接封装

func (*Connection) Close

func (c *Connection) Close()

Close 关闭连接

func (*Connection) GetChannels

func (c *Connection) GetChannels() []string

GetChannels 获取连接已加入的所有频道

func (*Connection) GetMetadata

func (c *Connection) GetMetadata(key string) (interface{}, bool)

GetMetadata 获取连接元数据

func (*Connection) IsInChannel

func (c *Connection) IsInChannel(channel string) bool

IsInChannel 检查连接是否在指定频道中

func (*Connection) JoinChannel

func (c *Connection) JoinChannel(channel string)

JoinChannel 加入频道

func (*Connection) LeaveChannel

func (c *Connection) LeaveChannel(channel string)

LeaveChannel 离开频道

func (*Connection) SendMessage

func (c *Connection) SendMessage(msg *Message) error

SendMessage 发送消息到连接

func (*Connection) SetMetadata

func (c *Connection) SetMetadata(key string, value interface{})

SetMetadata 设置连接元数据

type Manager

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

Manager WebSocket连接管理器

func NewManager

func NewManager() *Manager

NewManager 创建新的WebSocket管理器

func (*Manager) AddConnectionToChannel

func (m *Manager) AddConnectionToChannel(conn *Connection, channel string)

AddConnectionToChannel 将连接添加到频道

func (*Manager) Broadcast

func (m *Manager) Broadcast(msg *Message)

Broadcast 向所有连接广播消息

func (*Manager) BroadcastToChannel

func (m *Manager) BroadcastToChannel(channel string, msg *Message) error

BroadcastToChannel 向特定频道的所有连接广播消息

func (*Manager) BroadcastToUser

func (m *Manager) BroadcastToUser(userID string, msg *Message)

BroadcastToUser 向特定用户的所有连接广播消息

func (*Manager) GetChannelConnections

func (m *Manager) GetChannelConnections(channel string) ([]*Connection, error)

GetChannelConnections 获取频道中的所有连接

func (*Manager) GetChannels

func (m *Manager) GetChannels() []string

GetChannels 获取所有频道

func (*Manager) GetConnection

func (m *Manager) GetConnection(id string) (*Connection, error)

GetConnection 获取指定ID的连接

func (*Manager) GetConnections

func (m *Manager) GetConnections() []*Connection

GetConnections 获取所有连接

func (*Manager) GetConnectionsByUserID

func (m *Manager) GetConnectionsByUserID(userID string) []*Connection

GetConnectionsByUserID 获取指定用户ID的所有连接

func (*Manager) HandleRequest

func (m *Manager) HandleRequest(w http.ResponseWriter, r *http.Request)

HandleRequest 处理WebSocket连接请求

func (*Manager) RemoveConnection

func (m *Manager) RemoveConnection(conn *Connection)

RemoveConnection 移除并关闭连接

func (*Manager) RemoveConnectionFromChannel

func (m *Manager) RemoveConnectionFromChannel(conn *Connection, channel string)

RemoveConnectionFromChannel 从频道中移除连接

func (*Manager) SetAfterConnect

func (m *Manager) SetAfterConnect(fn func(conn *Connection))

SetAfterConnect 设置连接后钩子

func (*Manager) SetAfterDisconnect

func (m *Manager) SetAfterDisconnect(fn func(conn *Connection))

SetAfterDisconnect 设置断开连接后钩子

func (*Manager) SetAuthFunc

func (m *Manager) SetAuthFunc(fn func(r *http.Request) (string, map[string]interface{}, error))

SetAuthFunc 设置认证函数

func (*Manager) SetBeforeConnect

func (m *Manager) SetBeforeConnect(fn func(r *http.Request) bool)

SetBeforeConnect 设置连接前钩子

func (*Manager) SetBeforeDisconnect

func (m *Manager) SetBeforeDisconnect(fn func(conn *Connection))

SetBeforeDisconnect 设置断开连接前钩子

func (*Manager) SetMessageHandler

func (m *Manager) SetMessageHandler(fn func(conn *Connection, msg *Message) error)

SetMessageHandler 设置消息处理函数

func (*Manager) SetUpgrader

func (m *Manager) SetUpgrader(upgrader websocket.Upgrader)

SetUpgrader 设置WebSocket升级器

type Message

type Message struct {
	// Type 消息类型 (如"chat", "notification", "system"等)
	Type string `json:"type"`

	// Event 事件名称 (如"message.sent", "user.joined"等)
	Event string `json:"event"`

	// Channel 频道名称
	Channel string `json:"channel,omitempty"`

	// Data 消息数据
	Data interface{} `json:"data,omitempty"`

	// SenderID 发送者ID
	SenderID string `json:"sender_id,omitempty"`

	// Timestamp 时间戳
	Timestamp int64 `json:"timestamp"`
}

Message WebSocket消息结构

Jump to

Keyboard shortcuts

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