> For the complete documentation index, see [llms.txt](https://shniu.gitbook.io/cs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://shniu.gitbook.io/cs/tiny-project/a-simple-wechat-like-instant-messaging-platform.md).

# A Simple WeChat-like Instant Messaging Platform

WeChat-like multi-person Instant Messaging Platform.

作为练习项目，打算开发一个类似于微信的即时通讯平台，项目名称就叫 FlashChat，做这个小型的练习项目的目的是**想更好的学习网络相关的知识**，IM 系统中网络通信是基础，而且对网络通信的要求是非常高的，当然，肯定是从最简单的原型入手，期望能够一步步实现一个支持10万+用户同时在线的即时通讯的平台。

技术选型的初步计划

1. 先使用 Java NIO 技术来实现一个原型版的 IM 系统，主要是熟悉和运用 Java 的 NIO 相关技术
2. 然后将这个原型使用 Netty 进行改造，作为后面功能迭代的基础，因为 Netty 确实是一个非常高性能的网络通信基础框架，尽量少造轮子，之所以先使用 Java NIO 开发一个原型版本，就是想知道这个轮子该怎么造，这个过程中需要注意什么问题，有什么坑在里边

### MVP 1 版本的需求

IM 系统中存在很多个客户端，客户端连接到服务端，发送消息给服务端，然后服务端转发消息给指定的客户端，所以一个最基本的收发消息的功能是必须的；

要发消息就需要有多个用户，所以方便的创建用户是必须的；发送消息也要有发送对象，所以简单的加好友的功能也是必须的，但是暂时可以不需要，我们可以先实现给任意的人发消息，不管它是不是好友

总结如下：

1. 用户在第一次启动时，需要进行简单的注册（手机号+昵称），然后分配得到一个 userId，接下来就可以进行聊天了
2. 用户登录成功，选择一个好友，可以发送消息给对方，对方可以正常收到消息
3. 在某个客户端收到消息后，可以回复消息给对方
4. 要特别注意消息的顺序
5. ~~用户可以根据手机号搜索某个好友，读取到基本信息~~
6. ~~用户可以添加某个用户为好友，直接加，可以先不通过验证机制~~
7. ~~用户可以拉取自己的好友列表~~

所以 v1 版本只实现：1. 支持用户简单的注册和登录；2. 支持多个客户端连接到服务端；3. 支持某个客户端的用户发送消息给其他的客户端，其他客户端能收到并回复消息

### IM 参考设计

* [高并发 IM 架构设计与实现](https://www.cnblogs.com/crazymakercircle/p/10246934.html)
* [搭建一个分布式 IM 系统](https://crossoverjie.top/JCSprout/#/netty/cim)
* [设计一个百万级的消息推送系统](https://crossoverjie.top/2018/09/25/netty/million-sms-push/)
