内容简介:这个demo实现了:提供了一个通过命令行来进行聊天的例子具体逻辑都在 websocket.go 这个文件里
这个demo实现了:
- 消息广播
- 心跳检测
提供了一个通过命令行来进行聊天的例子
具体逻辑都在 websocket.go 这个文件里
这里的核心就是 aliveList
这个全局变量, 负责把消息分发给各客户端, 事件用channel来传递, 减少阻塞
单个链接会在 aliveList
中注册, ConnList 就是所有活跃的链接
// AliveList 当前在线列表 type AliveList struct { ConnList map[string]*Client register chan *Client destroy chan *Client broadcast chan Message cancel chan int Len int } // Client socket客户端 type Client struct { ID string conn *websocket.Conn cancel chan int }
服务启动后会执行事件监听循环
// 启动监听 func (al *AliveList) run() { log.Println("开始监听注册事件") for { select { case client := <-al.register: log.Println("注册事件:", client.ID) al.ConnList[client.ID] = client al.Len++ al.SysBroadcast(ConnectedMessage, Message{ ID: client.ID, Content: "connected", SentAt: time.Now().Unix(), }) case client := <-al.destroy: log.Println("销毁事件:", client.ID) err := client.conn.Close() if err != nil { log.Printf("destroy Error: %v \n", err) } delete(al.ConnList, client.ID) al.Len-- case message := <-al.broadcast: log.Printf("广播事件: %s %s %d \n", message.ID, message.Content, message.Type) for id := range al.ConnList { if id != message.ID { err := al.sendMessage(id, message) if err != nil { log.Println("broadcastError: ", err) } } } case sign := <-al.cancel: log.Println("终止事件: ", sign) os.Exit(0) } } }
因为消息的类型比较多, 单纯字符串无法满足需求, 就选用了比较常用的json格式去传递, 消息目前分:
const ( // SystemMessage 系统消息 SystemMessage = iota // BroadcastMessage 广播消息(正常的消息) BroadcastMessage // HeartBeatMessage 心跳消息 HeartBeatMessage // ConnectedMessage 上线通知 ConnectedMessage // DisconnectedMessage 下线通知 DisconnectedMessage ) // Message 消息体结构 type Message struct { ID string Content string SentAt int64 Type int // <- SystemMessage 等类型就是这里了 }
如果有空闲时间就再搞搞多聊天室的实现, 以及优化一下目前的事件循环逻辑
以上所述就是小编给大家介绍的《用Gorilla Websocket 搞一个聊天室》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- h5聊天室模板|仿微信聊天室html5
- Netty网络聊天(一) 聊天室的实战(最易懂)
- 基于Flutter+Dart聊天实例|flutter仿微信界面聊天室
- 实战swoole【聊天室】
- 如何快速实现一个聊天室?
- 搭建Websocket简易聊天室
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Algorithms Unlocked
Thomas H. Cormen / The MIT Press / 2013-3-1 / USD 25.00
Have you ever wondered how your GPS can find the fastest way to your destination, selecting one route from seemingly countless possibilities in mere seconds? How your credit card account number is pro......一起来看看 《Algorithms Unlocked》 这本书的介绍吧!