# group_chat
**Repository Path**: lin-gitbub/group_chat
## Basic Information
- **Project Name**: group_chat
- **Description**: 采用socket通信和BIO模式实现的群聊
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2023-04-04
- **Last Updated**: 2023-04-04
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 工程简介
采用socket和BIO实现的简单群聊
**这里包含了一个服务端和多个客户端**
### 一、服务端
**服务端实现的需求:**
1、注册端口
2、接收客户端socket连接,交给一个独立的线程处理
3、把当前连接的客户端socket存入到一个所谓的在线socket集合中保存
4、接收客户端的信息,然后推送给当前所有在线socket接收
**细节:**
因此采用的是BIO方式,每个socket都需要一个线程去处理,这里有多个socket,因此需要用到多线程, 因为socket与线程是1:1的,
为了避免一直创建新的线程导致线程栈溢出,这里采用线程池来管理多线程。
### 二、客户端
基于BIO模式下的即时通信,我们需要解决客户端到客户端的通信,也就是需要实现客户端与客户端的
端口消息转发逻辑。
#### 功能清单简单说明:
**1.客户端登录功能**
可以启动客户端进行登录,客户端登录只需要输入用户名和服务端IP地址即可。
**2.在线人数实时更新**
客户端用户登录后,需要同步更新所有客户端的联系人信息栏。
**3.离线人数更新**
检测到有客户端下线后,需要同步更新所有客户端的联系人信息栏。
**4.群聊**
任意一个客户端的消息,可以推动给当前所有的客户端接收。
**5.私聊**
任意一个客户端消息,可以推动给当前所有客户端接收。
**6.@消息**
可以选择某个员工,然后发出的消息可以@该用户,但是其他所有人都能收到消息。
**7.消息用户和消息时间点**
服务端可以实时记录该用户的消息时间点,然后进行消息的多路转发或则选择。
# 扩展阅读
**本案例涉及到了以下知识点:**
1.java面向对象设计,语法设计
2.多线程技术
3.IO流技术
4.网络通信相关技术
5.集合框架
6.项目开发思维
7.java常用api使用