开发者学堂课程【Go 语言核心编程 - 面向对象、文件、单元测试、反射、TCP 编程:客户端发消息思路分析】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/626/detail/9820
客户端发消息思路分析
一、 海量用户即时通讯系统
实现功能:完成登录用可以群聊。群聊的功能分为两个步骤完成。
(1) 步骤1:当一个用户上线后,可以将群聊消息发给服务器,服务器可以接收到。
此时已经进入 server.go 的界面,当输入2时希望可以提示需要说的内容,需要找到server.go的相应位置。
case 2:
fmt.Println(“发送消息”)
服务器收到消息后进行转发,需要新增一个结构体,称为 SmsMes。
SmsMes{
Userid..
UserName..
Content..
}
但是这个结构没有有效利用前面定义完成的结构体。这个消息分为两大块,第一块包括SM发送的内容,第二块包括发送的信息,指发送人的信息以及发送了什么信息。如果是点对点聊,会麻烦一点,因为需要将发送消息的对象指明。
既然如此设计成两个部分
SmsMes{
User
Content…
}
想把消息发送出去,客户端应维护重要连接。若不维护,server.go只能保证读取,但没有保存。
我们应该在model层新建一个称为CurUser的结构体
Model/CurUser
struct{
Conn
User…
}
//短消息结构体
Type SmsMes struct{message/message.go
User User ‘json:”user”’
Content string ‘json:”content”’
}
Type CurUser struct{
Message.User //继承
Conn net.Conn ‘json:”con”’
} client/model/curUser.go[新增]
以上两个 user 有区别,上面的 user 信息包含内容,而 cur 则包含连接
当发送信息时,要新建一个专门用于发送消息的处理器,即 smsProcessor,用它管理信息的发送。
Case “”
fmt.Println(“发送信息”)client/server.go
fmt.Println(“请输入你要发送的消息…”)
fmt.Scanf(“%s\n”,R&sms)
smsProcessor := &SmsProcessor{}
smsProcessor.SendSms(sms)
发送之后服务器应正常接收
func (this *Processor) serverProcessMes(msg *me
fmt.Println(“客户端发送的消息=”,msg)
完成客户端可以发送消息的思路:
1. 新增一个消息结构体 SmMes…
2. 新增一个 model CurUser
3. 在 smsProcess.go 增加相应的方法 SendGroupMess 发送一个群聊的消息