即时通信系统 -- V0.3消息广播功能
在处理业务的 Handler(conn net.Conn) 方法中加入可以从当前 conn 中读取消息并广播的功能
go func() {
buf := make([]byte, 4096)
for {
n, err := conn.Read(buf)
if n == 0 {
this.BroadCast(user, "下线")
return
}
if err != nil && err != io.EOF {
fmt.Println("Conn Read err:", err)
}
msg := string(buf[ : n - 1])
this.BroadCast(user, msg)
}
}()
总结:
- net.Conn.Read() 可以将连接中的信息读入字节切片中,返回值为字节切片长度 n 与 err;
- n == 0 表示连接正常断开,广播用户下线消息,对应在 terminal 中敲 cirl + C
- err != nil && err != io.EOF 表面连接中的消息未读完就出现 err,说明读取出错
- 把字节切片转换为 msg 时要把最后的 '\n' 去除(因为在 user 的 ListenMessage 中已经给 msg 后填上换行了,否则每条消息后都会多一个换行),所以是 buf[:n-1]
分类:
后端开发
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!