tlnet将websocket封装为request/respone的使用模式,将读取数据部分,链接异常等与实际也无关的工作封装起来;使用更加直观和简洁
项目案例可以参考 tlnetim
以下是部分示例:
HandleWebSocket
HandleWebSocketBindOrigin
HandleWebSocketBindOriginFunc
HandleWebSocketBindConfig
4个函数存储包含关系,实现后面函数则包含前面的函数
HandleWebSocketBindConfig为例
以tlnetim的实现为例:
tlnet.HandleWebSocketBindConfig("/ws", wshandlerFunc, wsWebsocketConfig())
// websocket 接收到数据后的操作
func wshandlerFunc(hc *tlnet.HttpContext) {
var wa wsack
if err := json.Unmarshal(hc.WS.Read(), &wa); err == nil { //hc.WS.Read() 读取websocket接收的数据
parse(wa, hc.WS) //解析并处理信息
}
}
func wsWebsocketConfig() (wc *tlnet.WebsocketConfig) {
wc = &tlnet.WebsocketConfig{}
//websocket断开时,触发OnError。删除wsmap中的连接
wc.OnError = func(self *tlnet.Websocket) {
defer MyRecover()
if r, ok := wsmap.Get(self); ok {
if u, ok := getIu(r, self); ok {
//掉线通知
broadcast(&wsack{ATYPE: LOGOUT, USERNAME: u.Name}, nil, r, true, true)
}
}
}
//wc.OnOpen 用在连接成功时调用
return
}
tlnet中websocket的数据主要由3个函数处理:
其中有两个函数在 wsWebsocketConfig中:
wc.OnOpen
为客户端连接成功后调用的函数。
wc.OnError
为连接断开后出错时,调用的函数。
第三个函数在注册函数 HandleWebSocketBindConfig("/ws",
wshandlerFunc
, wsWebsocketConfig())中 wshandlerFunc 为接收到客户端数据时的处理函数
3个函数根据业务需要赋值实现,或不赋值(赋nil值亦可)
有任何问题或建议请Email:donnie4w@gmail.com或 http://tlnet.top/contact 发信给我,谢谢!