前言
本篇文章记录了编写一个多用户即时聊天系统的过程,系统中会使用多线程的方式来维持每个客户端,但是应该不会涉及epoll之类的IO复用技术。
一、功能实现和需求
该系统实现的功能有:
- 用户注册登录
- 用户拉取在线用户列表
- 用户之间私聊
- 传输文件
- 群发推送
- 。。未完待续
由于本项目没有编写相关的UI界面,因此客户端操作会在命令行窗口执行。其中一级界面和二级界面如下图所示:
或许以后会编写UI界面完善。
该项目还没使用到数据库相关内容,因此只用HashMap来存储少量的注册用户。
二、整体系统分析
1. 系统分析
其中系统结构图如下:
可以看出,我们用Message对象来进行通讯,User对象保存用户的信息。无论在客户端还是服务端,都会维持一个集合来存放线程,这些线程会持有一个socket,以达到多线程通讯的目的。
2. 公用类
由于C/S端之间会用到Message对象和User对象进行通信,所以需要在两端编写这两个公用类。代码如下
/**
* Message类
*/
public class Message implements Serializable {
//需要序列化
private static final long serialVersionUID=1L;
private String sender;//发送方
private String getter;//接收方
private String content;//传送的内容
private String sendTime;