# A Simple WeChat-like 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/)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://shniu.gitbook.io/cs/tiny-project/a-simple-wechat-like-instant-messaging-platform.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
