image.png

实现步骤

1、客户端发送消息长度,服务端正确接收消息

思路分析:
客户端

  1. 先确定 Message 格式和结构
  2. 组织消息
  3. 序列化
  4. 发送

服务端

  1. 等待接收客户端消息
  2. 创建 goroutine 处理客户端连接
  3. 服务端读取消息

    2、客户端发送消息本身

    思路分析:

  4. 让客户端发送消息本身

  5. 服务器端接受到消息, 然后反序列化成对应的消息结构体.
  6. 服务器端根据反序列化成对应的消息, 判断是否登录用户是合法,返回 LoginResMes
  7. 客户端解析返回的 LoginResMes,显示对应界面

这里我们需要做函数的封装、

分层模式 MVC

中转站,分发,分而治之
从底层(被调用最多的包开始,这里就是 utils.go)向上开始一步步抽离
面向对象思想,封装,定义结构体,绑定方法,结构体之间调用。

服务端结构拆分示意图

image.png

客户端结构拆分示意图

image.png

连接redis

示意图:
image.png
image.png
image.png
image.png

在线列表
广播,同步更新

✨项目地址

https://gitee.com/hey-u/go-chatroom

效果图

image.png
image.png
image.png

扩展需求

  1. 实现私聊[点对点聊天]
  2. 如果一个登录用户离线,就把这个人从在线列表去掉
  3. 实现离线留言,在群聊时,如果某个用户没有在线,当登录后,可以接受离线的消息

    实现退出登录,并通知其他在线用户

  4. 客户端发出 logout 的请求

  5. 服务端接收并处理客户端的 logou 的请求,并将处理结果返回给客户端。与此同时,服务端发出广播,通知其他在线用户,有人下线,并更新在线人员列表
  6. 客户端接收服务端的处理结果,随即退出系统