Documentation
¶
Overview ¶
* @Author: kamalyes 501893067@qq.com * @Date: 2025-09-06 09:50:55 * @LastEditors: kamalyes 501893067@qq.com * @LastEditTime: 2026-09-22 16:09:00 * @FilePath: \go-wsc\client\client.go * @Description: Client 客户端门面 —— 回调装配、状态查询与消息发送 * * Copyright (c) 2025 by kamalyes, All Rights Reserved.
* @Author: kamalyes 501893067@qq.com * @Date: 2025-09-06 09:50:55 * @LastEditors: kamalyes 501893067@qq.com * @LastEditTime: 2025-12-28 20:01:00 * @FilePath: \go-wsc\client\connection.go * @Description: 连接管理逻辑 * * Copyright (c) 2025 by kamalyes, All Rights Reserved.
* @Author: kamalyes 501893067@qq.com * @Date: 2025-09-06 09:50:55 * @LastEditors: kamalyes 501893067@qq.com * @LastEditTime: 2026-10-26 20:31:08 * @FilePath: \go-wsc\client\websocket.go * @Description: WebSocket 结构体及其方法 * * Copyright (c) 2025 by kamalyes, All Rights Reserved.
Index ¶
- Variables
- func IsNormalClose(err error) bool
- func ResolveServers(ctx context.Context, host, port, path string) ([]string, error)
- type Client
- func (c *Client) Close()
- func (c *Client) CloseAndReconnect()
- func (c *Client) CloseWithMsg(msg string)
- func (c *Client) Closed() bool
- func (c *Client) Connect()
- func (c *Client) ConnectedUrl() string
- func (c *Client) GetConnectionStatus() models.ConnectionStatus
- func (c *Client) HasOnBinaryMessageReceivedCallback() bool
- func (c *Client) HasOnBinaryMessageSentCallback() bool
- func (c *Client) HasOnCloseCallback() bool
- func (c *Client) HasOnConnectErrorCallback() bool
- func (c *Client) HasOnConnectedCallback() bool
- func (c *Client) HasOnDisconnectedCallback() bool
- func (c *Client) HasOnPingReceivedCallback() bool
- func (c *Client) HasOnPongReceivedCallback() bool
- func (c *Client) HasOnSentErrorCallback() bool
- func (c *Client) HasOnTextMessageReceivedCallback() bool
- func (c *Client) HasOnTextMessageSentCallback() bool
- func (c *Client) IsConnected() bool
- func (c *Client) IsConnecting() bool
- func (c *Client) OnBinaryMessageReceived(f func(data []byte))
- func (c *Client) OnBinaryMessageSent(f func(data []byte))
- func (c *Client) OnClose(f func(code int, text string))
- func (c *Client) OnConnectError(f func(err error))
- func (c *Client) OnConnected(f func())
- func (c *Client) OnDisconnected(f func(err error))
- func (c *Client) OnPingReceived(f func(appData string))
- func (c *Client) OnPongReceived(f func(appData string))
- func (c *Client) OnSentError(f func(err error))
- func (c *Client) OnTextMessageReceived(f func(message string))
- func (c *Client) OnTextMessageSent(f func(message string))
- func (c *Client) SendBinaryMessage(data []byte) error
- func (c *Client) SendTextMessage(message string) error
- func (c *Client) SetConfig(config *wscconfig.WSC)
- func (c *Client) WithServers(urls []string) *Client
- type ClientMessage
- type WebSocket
- func (ws *WebSocket) GetConn() *websocket.Conn
- func (ws *WebSocket) GetDialer() *websocket.Dialer
- func (ws *WebSocket) GetHttpResponse() *http.Response
- func (ws *WebSocket) GetRequestHeader() http.Header
- func (ws *WebSocket) GetSendChan() chan *ClientMessage
- func (ws *WebSocket) GetSendChanCapacity() int
- func (ws *WebSocket) GetSendChanLength() int
- func (ws *WebSocket) GetURL() string
- func (ws *WebSocket) IsConnected() bool
- func (ws *WebSocket) SendMessageForTest(msgType int, data []byte) error
- func (ws *WebSocket) SetConnectedForTest(connected bool)
- func (ws *WebSocket) WithCustomURL(url string) *WebSocket
- func (ws *WebSocket) WithDialer(dialer *websocket.Dialer) *WebSocket
- func (ws *WebSocket) WithRequestHeader(header http.Header) *WebSocket
- func (ws *WebSocket) WithSendBufferSize(size int) *WebSocket
Constants ¶
This section is empty.
Variables ¶
var DefaultUpgrader = websocket.Upgrader{ CheckOrigin: func(r *http.Request) bool { return true }, }
DefaultUpgrader 返回默认的WebSocket升级器
Functions ¶
func ResolveServers ¶
ResolveServers 解析 headless Service 域名到全部 Pod 直连地址(集群内 LB 直连入口)
host 为 headless Service 域名(如 apex-notify-service-headless.business.svc.cluster.local), port/path 为直连端口与 WS 路径;返回的 ws:// 地址列表直接喂给 WithServers。 Pod 扩缩容/滚动更新会改变解析结果——调用方应周期性重解析刷新列表 (建议重连窗口前刷新;列表过期仅导致轮转到已下线地址,失败转下一下一自愈)。 注意:产出为明文 ws://,集群内直连通常无 TLS;跨网段需 TLS 时由调用方自行包装 wss:// 地址
Types ¶
type Client ¶
type Client struct {
Config *wscconfig.WSC // 配置信息,用于配置 WebSocket 客户端的参数
WebSocket *WebSocket // 底层 WebSocket 连接,负责实际的网络通信
// contains filtered or unexported fields
}
Client WebSocket 客户端门面 封装连接状态机、回调装配与消息发送,连接管理细节见 connection.go
func NewWithServers ¶
NewWithServers 创建多服务器直连客户端(LB 直连模式) 每次建连/重连随机挑选地址:长连接场景下连接天然均匀分布到各节点, 断线重连风暴自动再平衡(不再集中打回原节点);单地址失败同轮轮转剩余地址
func (*Client) CloseAndReconnect ¶
func (c *Client) CloseAndReconnect()
CloseAndReconnect 处理断线重连(公开用于测试)
func (*Client) ConnectedUrl ¶
ConnectedUrl 返回当前实际连上的地址(观测/诊断;多地址直连模式下每次拨号可能不同,未连接过返回空串)
func (*Client) GetConnectionStatus ¶
func (c *Client) GetConnectionStatus() models.ConnectionStatus
GetConnectionStatus 获取当前连接状态
func (*Client) HasOnBinaryMessageReceivedCallback ¶
HasOnBinaryMessageReceivedCallback 检查是否设置了二进制消息接收回调
func (*Client) HasOnBinaryMessageSentCallback ¶
HasOnBinaryMessageSentCallback 检查是否设置了二进制消息发送成功回调
func (*Client) HasOnCloseCallback ¶
HasOnCloseCallback 检查是否设置了连接关闭回调
func (*Client) HasOnConnectErrorCallback ¶
HasOnConnectErrorCallback 检查是否设置了连接错误回调
func (*Client) HasOnConnectedCallback ¶
HasOnConnectedCallback 检查是否设置了连接成功回调
func (*Client) HasOnDisconnectedCallback ¶
HasOnDisconnectedCallback 检查是否设置了连接断开回调
func (*Client) HasOnPingReceivedCallback ¶
HasOnPingReceivedCallback 检查是否设置了Ping接收回调
func (*Client) HasOnPongReceivedCallback ¶
HasOnPongReceivedCallback 检查是否设置了Pong接收回调
func (*Client) HasOnSentErrorCallback ¶
HasOnSentErrorCallback 检查是否设置了发送错误回调
func (*Client) HasOnTextMessageReceivedCallback ¶
HasOnTextMessageReceivedCallback 检查是否设置了文本消息接收回调
func (*Client) HasOnTextMessageSentCallback ¶
HasOnTextMessageSentCallback 检查是否设置了文本消息发送成功回调
func (*Client) OnBinaryMessageReceived ¶
OnBinaryMessageReceived 设置接收到二进制消息的回调 参数 f: 接收到二进制消息时调用的函数,参数为接收到的数据
func (*Client) OnBinaryMessageSent ¶
OnBinaryMessageSent 设置发送二进制消息成功的回调 参数 f: 发送成功时调用的函数,参数为发送的数据
func (*Client) OnConnectError ¶
OnConnectError 设置连接出错的回调 参数 f: 连接出错时调用的函数,参数为错误信息
func (*Client) OnConnected ¶
func (c *Client) OnConnected(f func())
OnConnected 设置连接成功的回调 参数 f: 连接成功后调用的函数
func (*Client) OnDisconnected ¶
OnDisconnected 设置连接断开的回调 参数 f: 连接断开时调用的函数,参数为错误信息
func (*Client) OnPingReceived ¶
OnPingReceived 设置接收到 Ping 消息的回调 参数 f: 接收到 Ping 消息时调用的函数,参数为应用数据
func (*Client) OnPongReceived ¶
OnPongReceived 设置接收到 Pong 消息的回调 参数 f: 接收到 Pong 消息时调用的函数,参数为应用数据
func (*Client) OnSentError ¶
OnSentError 设置发送消息出错的回调 参数 f: 发送出错时调用的函数,参数为错误信息
func (*Client) OnTextMessageReceived ¶
OnTextMessageReceived 设置接收到文本消息的回调 参数 f: 接收到文本消息时调用的函数,参数为接收到的消息
func (*Client) OnTextMessageSent ¶
OnTextMessageSent 设置发送文本消息成功的回调 参数 f: 发送成功时调用的函数,参数为发送的消息
func (*Client) SendBinaryMessage ¶
SendBinaryMessage 发送二进制消息
func (*Client) SendTextMessage ¶
SendTextMessage 发送文本消息
func (*Client) WithServers ¶
WithServers 设置服务器直连地址列表(链式,LB 直连模式) 列表非空时建连优先走列表(随机挑选 + 失败轮转),Url 仅作列表为空时的单地址回退; 空列表与全空元素被忽略(保持既有单地址行为);集群内可配合 ResolveServers 解析 headless Service 拿到全量 Pod 地址
type ClientMessage ¶
ClientMessage 结构体表示 WebSocket 消息(公开用于测试)
type WebSocket ¶
type WebSocket struct {
Url string // 连接 URL(单地址模式的目标;多地址模式仅作初始回退)
Conn *websocket.Conn // WebSocket 连接
Dialer *websocket.Dialer // WebSocket 拨号器
RequestHeader http.Header // 请求头
HttpResponse *http.Response // 响应体
// contains filtered or unexported fields
}
WebSocket 结构体表示底层 WebSocket 连接
func (*WebSocket) GetHttpResponse ¶
GetHttpResponse 获取 HTTP 响应
func (*WebSocket) GetRequestHeader ¶
GetRequestHeader 获取请求头
func (*WebSocket) GetSendChan ¶
func (ws *WebSocket) GetSendChan() chan *ClientMessage
GetSendChan 获取发送消息通道
func (*WebSocket) GetSendChanCapacity ¶
GetSendChanCapacity 获取发送通道的容量
func (*WebSocket) GetSendChanLength ¶
GetSendChanLength 获取发送通道的当前长度
func (*WebSocket) SendMessageForTest ¶
SendMessageForTest 向发送通道注入消息
func (*WebSocket) SetConnectedForTest ¶
SetConnectedForTest 设置连接状态
func (*WebSocket) WithCustomURL ¶
WithCustomURL 设置自定义 URL
func (*WebSocket) WithDialer ¶
WithDialer 设置自定义的 WebSocket 拨号器
func (*WebSocket) WithRequestHeader ¶
WithRequestHeader 设置请求头
func (*WebSocket) WithSendBufferSize ¶
WithSendBufferSize 设置发送消息缓冲池大小