# 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使用