websocket

package
v0.0.41 Latest Latest
Warning

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

Go to latest
Published: Oct 10, 2024 License: MIT Imports: 10 Imported by: 0

Documentation

Index

Constants

View Source
const (
	WebsocketHandshakeSuccess = `{"code":2000,"msg":"ws连接成功","data":""}`
	WebsocketServerPingMsg    = "Server->Ping->Client"
)
View Source
const (
	ErrorsWebsocketOnOpenFail                 string = "websocket onopen 发生阶段错误"
	ErrorsWebsocketUpgradeFail                string = "websocket Upgrade 协议升级, 发生错误"
	ErrorsWebsocketReadMessageFail            string = "websocket ReadPump(实时读取消息)协程出错"
	ErrorsWebsocketBeatHeartFail              string = "websocket BeatHeart心跳协程出错"
	ErrorsWebsocketBeatHeartsMoreThanMaxTimes string = "websocket BeatHeart 失败次数超过最大值"
	ErrorsWebsocketSetWriteDeadlineFail       string = "websocket  设置消息写入截止时间出错"
	ErrorsWebsocketWriteMgsFail               string = "websocket  Write Msg(send msg) 失败"
	ErrorsWebsocketStateInvalid               string = "websocket  state 状态已经不可用(掉线、卡死等愿意,造成双方无法进行数据交互)"
)

Variables

This section is empty.

Functions

func Start

func Start()

Types

type Client

type Client struct {
	Hub                *Hub            // 负责处理客户端注册、注销、在线管理
	Conn               *websocket.Conn // 一个ws连接
	Send               chan []byte     // 一个ws连接存储自己的消息管道
	PingPeriod         time.Duration
	ReadDeadline       time.Duration
	WriteDeadline      time.Duration
	HeartbeatFailTimes int
	State              uint8 // ws状态,1=ok;0=出错、掉线等
	sync.RWMutex
	ClientMoreParams // 这里追加一个结构体,方便开发者在成功上线后,可以自定义追加更多字段信息
}

func (*Client) Heartbeat

func (c *Client) Heartbeat()

按照websocket标准协议实现隐式心跳,Server端向Client远端发送ping格式数据包,浏览器收到ping标准格式,自动将消息原路返回给服务器

func (*Client) OnOpen

func (c *Client) OnOpen(context *gin.Context) (*Client, bool)

处理握手+协议升级

func (*Client) ReadPump

func (c *Client) ReadPump(callbackOnMessage func(messageType int, receivedData []byte), callbackOnError func(err error), callbackOnClose func())

主要功能主要是实时接收消息

func (*Client) SendMessage

func (c *Client) SendMessage(messageType int, message string) error

发送消息,请统一调用本函数进行发送 消息发送时增加互斥锁,加强并发情况下程序稳定性 提醒:开发者发送消息时,不要调用 c.Conn.WriteMessage(messageType, []byte(message)) 直接发送消息

type ClientMoreParams

type ClientMoreParams struct {
	UserParams1 string `json:"user_params_1"` // 字段名称以及类型由 开发者自己定义
	UserParams2 string `json:"user_params_2"`
}

ClientMoreParams 为客户端成功上线后设置更多的参数 ws 客户端成功上线以后,可以通过客户端携带的唯一参数,在数据库查询更多的其他关键信息,设置在 *Client 结构体上 这样便于在后续获取在线客户端时快速获取其他关键信息,例如:进行消息广播时记录日志可能需要更多字段信息等

type Hub

type Hub struct {
	//上线注册
	Register chan *Client
	//下线注销
	UnRegister chan *Client
	//所有在线客户端的内存地址
	Clients map[*Client]bool
}

func CreateHubFactory

func CreateHubFactory() *Hub

func (*Hub) Run

func (h *Hub) Run()

type Websocket

type Websocket struct {
	Client *Client
}

func (*Websocket) BroadcastMsg

func (w *Websocket) BroadcastMsg(sendMsg string)

向全部在线客户端广播消息 广播函数可能被不同的逻辑同时调用,由于操作的都是 Conn ,因此为了保证并发安全,加互斥锁

func (*Websocket) GetOnlineClients

func (w *Websocket) GetOnlineClients() int

获取在线的全部客户端

func (*Websocket) OnClose

func (w *Websocket) OnClose()

OnClose 客户端关闭回调,发生onError回调以后会继续回调该函数

func (*Websocket) OnError

func (w *Websocket) OnError(err error)

OnError 客户端与服务端在消息交互过程中发生错误回调函数

func (*Websocket) OnMessage

func (w *Websocket) OnMessage(context *gin.Context)

OnMessage 处理业务消息

func (*Websocket) OnOpen

func (w *Websocket) OnOpen(context *gin.Context) (*Websocket, bool)

onOpen 事件函数

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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