go websocket 单聊 推送(群聊)实现

直接上代码了

在main方法里进行端口监听

go websocket 单聊 推送(群聊)实现

在server包实现具体逻辑,首先定义3个结构体

go websocket 单聊 推送(群聊)实现

go websocket 单聊 推送(群聊)实现

分别是所有客户端管理者(申明了有两个map 这两个map分别是绑定的是所有客户端连接,和单个客户端连接),后面两个分别是单个客户端和上传数据类型

接下来就是具体的实现逻辑

go websocket 单聊 推送(群聊)实现

go websocket 单聊 推送(群聊)实现

go websocket 单聊 推送(群聊)实现

这只是一个demo示例,其中只开了一个read不断读取的协程,没有开启write协程,让他们通过管道来通信,没有利用到go高并发的优势,但是这样一方面也能防止通道阻塞。代码写的很一般,比如没有代码分层,switch都写在一起了,按理说至少还能抽出来一个processData。。总而言之 这只是个简单的demo

具体效果

go websocket 单聊 推送(群聊)实现

go websocket 单聊 推送(群聊)实现

 

go websocket 单聊 推送(群聊)实现

如果关闭chatroom,服务器端会自动删除两个map 的中,推送的时候会提示没有发现client..

综上,这只是一个demo ,很多细节没有考虑,具体实际场景也有很大差异。。连最基本的redis 和mysql 都没用到,比如消息要留档,已读未读 可能需要开启一个goroutine 去入库,如果是群聊 可能还需要一个群id,这个群id下面可能还需要维护多个client 等等