Documentation
¶
Index ¶
- type CallbackHandles
- type Client
- type ClientOptions
- func (o *ClientOptions) SetConnectedCb(f func()) *ClientOptions
- func (o *ClientOptions) SetDisconnectCb(f func(err error, db *session.ConnectionDatabase)) *ClientOptions
- func (o *ClientOptions) SetHeader(h http.Header)
- func (o *ClientOptions) SetMessageCb(f func(byte, []byte)) *ClientOptions
- func (o *ClientOptions) SetReConnect(maxNum int, interval int64) *ClientOptions
- type ClientStatus
- type ServerHandlerInterface
- type Session
- type SessionDb
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type CallbackHandles ¶
type CallbackHandles struct { session.ConnectedCallBackHandle // 建立链接后的回调 session.DisConnectCallBackHandle // 断开链接后的回调 session.FrameCallBackHandle // 帧读取后的回调 }
CallbackHandles 回调组
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client websocket客户端,只有一个 Session,并自动发送ping帧(25秒)与自动回复pong帧
func NewClient ¶
func NewClient(opt *ClientOptions) *Client
NewClient 生成一个客户端
Example ¶
// 配置一个请求的header,将在服务的链接成功回调中获取到 dialHeader := http.Header{} dialHeader.Add("token", "my_token_xxx") client := NewClient(&ClientOptions{ ReConnectMaxNum: 3, ReConnectInterval: 5, ConnectedCallback: func() { // do connected }, DisConnectCallback: func(e error, db *session.ConnectionDatabase) { // do disconnect }, MessageCallback: func(t byte, bs []byte) { // do frame message }, RequestHeader: dialHeader, RequestTime: 30, PingTime: 25, IsStatistics: false, }) err := client.Dial("ws://127.0.0.1:8080") if err != nil { fmt.Println("dialErr: ", err.Error()) }
func (*Client) SendMessage ¶
SendMessage 发送消息到服务端
- frameType 消息类型,1:text;2:binary;9:ping;10:pong; 如是close消息,请调用Disconnect()方法
- payload 消息负载
- keys 消息加密key[可选]
type ClientOptions ¶
type ClientOptions struct { ReConnectMaxNum int ReConnectInterval int64 ConnectedCallback func() DisConnectCallback func(err error, db *session.ConnectionDatabase) MessageCallback func(byte, []byte) RequestHeader http.Header RequestTime int64 PingTime int64 IsStatistics bool }
ClientOptions 客户端配置
- ReConnectMaxNum 非正常断开后的重链次数,<0:不重链;0:一直重链;>0:重链接的最大次数;默认是5次
- ReConnectInterval 重链间隔(秒),默认是5秒,最小为一秒
- ConnectedCallback 链接成功后的回调
- DisConnectCallback 断开后的回调
- MessageCallback 接收到消息的回调
- RequestHeader 发送请求时携带额外的请求头
- RequestTime 发送请求的最大时长(秒),默认:10;最小:3;最大:60
- PingTime 自动发送pingFrame的时间(秒)配置, <1:关闭(默认值); 1~~25:都会配置为25秒; >120:都会配置为120秒
- IsStatistics 是否开启流量统计,默认为false
func (*ClientOptions) SetConnectedCb ¶
func (o *ClientOptions) SetConnectedCb(f func()) *ClientOptions
SetConnectedCb 配置链接成功后的回调
func (*ClientOptions) SetDisconnectCb ¶
func (o *ClientOptions) SetDisconnectCb(f func(err error, db *session.ConnectionDatabase)) *ClientOptions
SetDisconnectCb 配置断开后的回调
func (*ClientOptions) SetHeader ¶
func (o *ClientOptions) SetHeader(h http.Header)
SetHeader 配置发送请求时携带额外的请求头
func (*ClientOptions) SetMessageCb ¶
func (o *ClientOptions) SetMessageCb(f func(byte, []byte)) *ClientOptions
SetMessageCb 配置接收到消息的回调
func (*ClientOptions) SetReConnect ¶
func (o *ClientOptions) SetReConnect(maxNum int, interval int64) *ClientOptions
SetReConnect 配置重连参数
- maxNum 重链次数,<0:不重链;0:一直重链;>0:重链接的最大次数;默认是5次
- interval 重链间隔(秒),默认是5秒,最小为一秒
type ServerHandlerInterface ¶
type ServerHandlerInterface interface { SetCallbacks(*CallbackHandles) // 配置回调 Len() int // 返回客户端(Session)总数 GetSessionOnce(id int64) (Session, error) // 获取一个 Session GetSessionRange(start, end uint64) []Session // 获取获取 Session 列表 GetSessionWithIds(ids ...int64) map[int64]Session // 获取获取 Session 列表 DisConnect(id int64) error // 断开一个 Session ServeHTTP(w http.ResponseWriter, req *http.Request) // 实现net.http.Handler SetHandshakeCheckHandle(f func(req *http.Request) error) // 配置一个校验的握手的handle SendMessage(id int64, frameType byte, payload []byte, keys ...uint32) (int, error) // 发送消息到客户端 SetStatistics(b bool) // 是否开启流量统计,在执行ServeHTTP之前有效,默认为false SetPingTime(t int64) // 配置自动发送pingFrame的时间(秒),在执行ServeHTTP之前有效,<1:关闭(默认值); 1~~25:都会配置为25秒; >120:都会配置为120秒 SetTimeOut(i int64) // 配置 Session 超时,在执行ServeHTTP之前有效 }
ServerHandlerInterface 实现的业务
- 校验websocket握手(Handshake)
- net.http.Handler:实现ServeHTTP(w http.ResponseWriter, req *http.Request)
- 管理session:查询,断开
- 消息的接收与发送
func NewServerHandle ¶
func NewServerHandle() ServerHandlerInterface
NewServerHandle 生成一个全局唯一的 ServerHandlerInterface
Example ¶
serv := NewServerHandle() // 配置回调 serv.SetCallbacks(&CallbackHandles{ ConnectedCallBackHandle: func(id int64, req *http.Request) { // do connected }, DisConnectCallBackHandle: func(id int64, s frame.CloseStatus, db *session.ConnectionDatabase) { // do disconnect }, FrameCallBackHandle: func(id int64, t byte, bs []byte) { // do frame message }, }) serv.SetHandshakeCheckHandle(func(req *http.Request) error { // do Handshake return nil }) // 配置超时 serv.SetTimeOut(60) // 配置自动发送ping帧 serv.SetPingTime(10) // 配置打开数据统计 serv.SetStatistics(true) // ServerHandlerInterface 可以做为一个Http.HandlerFunc使用 http.Handle("/websocket", serv) http.ListenAndServe(":8080", nil)
Click to show internal directories.
Click to hide internal directories.