您的位置:首页 > 科技 > IT业 > 中国贸易信息网_重庆seo主管_快速排名优化推广排名_网站市场推广

中国贸易信息网_重庆seo主管_快速排名优化推广排名_网站市场推广

2024/12/23 9:36:24 来源:https://blog.csdn.net/weixin_40548182/article/details/144616040  浏览:    关键词:中国贸易信息网_重庆seo主管_快速排名优化推广排名_网站市场推广
中国贸易信息网_重庆seo主管_快速排名优化推广排名_网站市场推广

一、前言

敬告:本文不讲解代码,只是把代码展示出来。
该代码之前的代码见
go 聊天系统项目-1
go聊天系统项目-2 redis 验证用户id和密码
go聊天系统项目-3 redis注册用户
go聊天项目4-显示用户列表
go 聊天系统项目-5 客户端发消息
注意:本文使用 go mod 管理代码。详情见 go 包相关知识

修改和增加代码

server processor 模块 processor.go

func (this *Processor) serverProcessMes(mes *message.Message) (err error) {
......case message.RegisterMesType://处理注册up := &process2.UserProcess{Conn: this.Conn,}err = up.ServerProcessRegister(mes)
case message.SmsMesType://创建一个SmsProcess实例完成转发群聊消息smsProcess := &process2.SmsProcess{}smsProcess.SendGroupMes(mes)

server process2 包 smsProcess.go 文件

package process2import ("encoding/json""fmt""net""redis/day8/chatroom/common/message""redis/day8/chatroom/server/utils"
)type SmsProcess struct {
}func (this *SmsProcess) SendGroupMes(mes *message.Message) {//遍历服务器端的onlineUsers map[int]*UserProcess//将消息转发取出//取出mes的内容SmsMesvar smsMes message.SmsMeserr := json.Unmarshal([]byte(mes.Data), &smsMes)if err != nil {fmt.Println("json.Unmarshal err=", err)return}data, err := json.Marshal(mes)if err != nil {fmt.Println("json.Marshal err=", err)return}for id, up := range userMgr.onlineUsers {//这里,还需要过滤掉自己,即不要发送给自己if id == smsMes.UserId {continue}this.SendMesToEachOnlineUser(data, up.Conn)}}func (this *SmsProcess) SendMesToEachOnlineUser(data []byte, conn net.Conn) {//创建一个Transfer 实例,发送datetf := &utils.Transfer{Conn: conn, //}err := tf.WritePkg(data)if err != nil {fmt.Println("转发消息失败 err=", err)}
}

client process 模块 smsMes.go 文件

package processimport ("encoding/json""fmt""redis/day8/chatroom/common/message"
)func outputGroupMes(mes *message.Message) {//显示即可//1. 反序列化mes.Datavar smsMes message.SmsMeserr := json.Unmarshal([]byte(mes.Data), &smsMes)if err != nil {fmt.Println("json.Unmarshal err=", err.Error())return}//显示info := fmt.Sprintf("用户id:\t%d 对大家说:\t%s", smsMes.UserId, smsMes.Content)fmt.Println(info)
}

client process 模块 server.go 文件

在代码

func serverProcessMes(conn net.Conn) {
...case message.NotifyUserStatusMesType: //有人上线了//1.取出 NotifyUserStatusMesvar notifyUserStatusMes message.NotifyUserStatusMesjson.Unmarshal([]byte(mes.Data), &notifyUserStatusMes)//2.把这个用户的信息,状态保存到客户 mqp[int]User 中updateUserStatus(&notifyUserStatusMes)//处理

下增加如下代码

case message.SmsMesType: //有人群发消息outputGroupMes(&mes)

编译

cd /Users/zld/Go-project/src
go build -o main main.go
go build -o client day8/chatroom/client/main/main.go

群发消息测试

服务端

./main 
服务器[新的结构]8889 端口监听......
等待客户端连接服务器......
等待客户端连接服务器......
mes= &{LoginMes {"UserId":100,"UserPwd":"123456","UserName":""}}
&{100 123456 tom 0 } 登录成功
等待客户端连接服务器......
mes= &{LoginMes {"UserId":200,"UserPwd":"123456","UserName":""}}
&{200 123456 jack 0 } 登录成功
等待客户端连接服务器......
mes= &{LoginMes {"UserId":300,"UserPwd":"123456","UserName":""}}
&{300 123456 scott 0 } 登录成功

客户端1

./client 
---------------欢迎登录多人聊天系统-------------------1、登录聊天室2、注册用户3、退出系统请选择(1-3):
1
登录聊天室
请输入用户的id
100
请输入用户密码
123456
客户端,发送消息的长度=86,消息内容为: {"Type":"LoginMes","Data":"{\"UserId\":100,\"UserPwd\":\"123456\",\"UserName\":\"\"}"}
当前在线用户列表如下:----------恭喜xxx登录成功--------
--------1、显示在线用户列表--------
--------2、发送消息--------
--------3、信息列表--------
--------4、退出系统--------
客户端%s正在等待读取服务器发送的消息
用户id:  200
客户端%s正在等待读取服务器发送的消息
用户id:  200
用户id:  300
客户端%s正在等待读取服务器发送的消息

客户端2

./client 
---------------欢迎登录多人聊天系统-------------------1、登录聊天室2、注册用户3、退出系统请选择(1-3):
1
登录聊天室
请输入用户的id
200
请输入用户密码
123456
客户端,发送消息的长度=86,消息内容为: {"Type":"LoginMes","Data":"{\"UserId\":200,\"UserPwd\":\"123456\",\"UserName\":\"\"}"}
当前在线用户列表如下:
用户id:  100----------恭喜xxx登录成功--------
--------1、显示在线用户列表--------
--------2、发送消息--------
--------3、信息列表--------
--------4、退出系统--------
客户端%s正在等待读取服务器发送的消息
用户id:  300
用户id:  100
客户端%s正在等待读取服务器发送的消息

客户端3

./client 
---------------欢迎登录多人聊天系统-------------------1、登录聊天室2、注册用户3、退出系统请选择(1-3):
1
登录聊天室
请输入用户的id
300
请输入用户密码
123456
客户端,发送消息的长度=86,消息内容为: {"Type":"LoginMes","Data":"{\"UserId\":300,\"UserPwd\":\"123456\",\"UserName\":\"\"}"}
当前在线用户列表如下:
用户id:  200
用户id:  100----------恭喜xxx登录成功--------
--------1、显示在线用户列表--------
--------2、发送消息--------
--------3、信息列表--------
--------4、退出系统--------
客户端%s正在等待读取服务器发送的消息

客户端3群发消息

2
请输入你想对大家说点什么:
hello
----------恭喜xxx登录成功--------
--------1、显示在线用户列表--------
--------2、发送消息--------
--------3、信息列表--------
--------4、退出系统--------

服务端
mes= &{SmsMes {“Content”:“hello”,“userId”:300,“userPwd”:“”,“userName”:“”,“userStatus”:0,“sex”:“”}}
客户端1

用户id: 300 对大家说:   hello
客户端%s正在等待读取服务器发送的消息

客户端2

用户id: 300 对大家说:   hello
客户端%s正在等待读取服务器发送的消息

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com