Golang 消息推送系统

hwholiday · · 5764 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

## Golang 消息推送系统 - 使用 websocket 协议,实现全局推送,和分房间推送,实现用户加入房间,退出房间 - gateway 长连接网关服务器,管理全部的链接,以及房间等相关操作 - logic 逻辑服务器 管理发送全局推送,单个房间推送,加入房间,离开房间等相关操作 - 代码目录详情 ```bash ├── gateway // 长连接网关服务器 │   ├── push_job.go // 分发任务 │   ├── room.go // 房间,可作为某一类型的推送管理中心 │   ├── room_manage.go // 房间管理 │   ├── ws_conn.go // 简单封装的websocket方法 │   ├── ws_handle.go // 处理websocket协议方法 │   └── ws_server.go // websocket服务 ├── logic //逻辑服务器 │   ├── http_handle.go // 推送,房间相关 │   └── http_server.go // http服务 └── main.go ``` ### websocket相关 - 定义WsConnection结构体 ```go type WsConnection struct { mu sync.Mutex connId string // 链接ID ws *websocket.Conn // ws链接 readChan chan *WSMessage // 读取数据的管道 writeChan chan *WSMessage // 写数据的管道 closeChan chan bool // 关闭链接的管道 isOpen bool // 链接是否有效 addRoom *sync.Map // 该链接加入了那些房间 clientIp string // 客户端IP } ``` - 维持心跳 ```go switch { case msg.Type == 1://{"type":1,"data":"PING"},{"type":1,"data":"PONG"} _ = w.ws.SetReadDeadline(time.Now().Add(time.Second * 10)) _ = w.SendMsg(&WSMessage{Type: 1, Data: "PONG"}) default: fmt.Println("OTHER", msg.Type, msg.Data) } ``` ### 房间管理 ```go //一个房间代表一个订阅推送类型 type Room struct { id int // 房间ID title string // 房间标题 RConn sync.Map // 加入该房间的链接 } type RoomManage struct { AllRoom sync.Map // 所有的房间 AllConn sync.Map // 该网关的上的全部链接 } ``` ## gateway 协议 [在线测试WS](http://www.easyswoole.com/wstool.html) - ws://0.0.0.0:8888/connect - PING Client -> Server ```json {"type":1,"data":"PING"} ``` - PONG Server -> Client ```json {"type":1,"data":"PONG"} ``` ## logic 协议 - 全部推送 ```bash curl http://0.0.0.0:9999/push/all -X POST -d "val=test push&tag=3" ``` - 单个房间推送 ```bash curl http://0.0.0.0:9999/push/room -X POST -d "val=test push&tag=3&id=1" ``` - 加入房间 (wsId 在用户链接上gateway时可以得到) ```bash curl http://0.0.0.0:9999/room/join -X POST -d "id=1&wsId=3cc97117-aa4d-55bb-86db-a1d77e51283b" ``` - 离开房间 ```bash curl http://0.0.0.0:9999/room/leave -X POST -d "id=1&wsId=3cc97117-aa4d-55bb-86db-a1d77e51283b" ``` ### DEMO [代码地址](https://github.com/hwholiday/learning_tools/tree/master/go_push) ## 联系 QQ: 3355168235

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

5764 次点击  ∙  2 赞  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传