day01-需求分析和系统设计
多用户即时通讯系统01
1.项目开发流程
2.需求分析
- 用户登录
- 拉取在线用户列表
- 无异常退出(包括客户端和服务端)
- 私聊
- 群聊
- 发文件
- 服务器推送新闻/广播
3.设计阶段
3.1界面设计
- 用户登录:

- 拉取在线用户列表:

- 私聊:


- 群聊:



- 发文件:


- 文件服务器推送新闻:
3.2通讯系统整体设计
-
对传输数据的分析:
因为在通讯的时候信息的种类和信息比较多,如果使用文本的方式来传递数据,那么服务器拿到信息的时候对其进行拆解会很麻烦。因此使用对象的方式来进行数据的传输(同时使用对象流来传输)
-
对于socket的分析:
在客户端连接服务器的过程中,服务器端通过端口监听,通过accept方法返回,得到一个Socket对象。客户端和服务端就是通过Socket来获取数据通道上的信息来进行相互通讯的。这意味着服务器在监听的过程中,随着连接的客户端数量的增多,服务端对应产生的Socket对象也会不断增多。
考虑一个问题:如果服务端要同时和多个客户端进行通讯,怎么样才能保持服务端产生的所有Socket对象,分别同时和许多客户端进行通讯呢?答案是使用线程!
-
对服务端socket的线程的分析:
服务端广播的时候,服务器需要对所有客户端进行通知,需要对服务器端的所有socket进行处理,为了便于管理,这时候就需要有一个管理线程的集合
-
对客户端socket的分析:
在服务端里,有一个管理线程的集合,集合中的每个线程都有一个socket,每个socket都对应着一个数据通道。现在来考虑:在一个客户端中,也有可能有与服务器创建多个连接,也就是一个客户端和服务端产生多个数据通道的情况,即在一个客户端中,也有可能产生多个socket。因此在客户端也应该使用线程。
同时为了便于管理,客户端也应该有一个管理线程的集合。
总结:
服务端:
-
当有客户端连接到服务器后,服务端会得到一个socket
-
启动一个线程,该线程持有该socket对象,也就是说socket是该线程的属性
-
为了更好的管理线程,需要使用集合来管理(如:HashMap)
客户端:
-
和服务端通信时,使用对象方式,可以使用对象流来读写
-
当客户端连接到服务端后,也会得到socket
-
启动一个线程,该线程持有socket
-
为了更好的管理线程,也将该线程放入到集合中
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!