# webchat
**Repository Path**: peter-liu-a/webchat
## Basic Information
- **Project Name**: webchat
- **Description**: 【在线聊天室】由SpringClould+WebSocket+Netty构建,完整实现了HTML5在线多人聊天功能
- **Primary Language**: Java
- **License**: Apache-2.0
- **Default Branch**: master
- **Homepage**: https://f12.ink
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 8
- **Created**: 2023-04-18
- **Last Updated**: 2023-04-18
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# webchat
#### 项目介绍
由SpringCloud+WebSocket+Netty构建,完整实现了HTML5在线多人聊天功能。支持各种消息发送和查看,聊天记录离线保存,未读消息记录,视频语音通话(WebRTC),个性化设置以及管理员权限。
WebScoket消息发送,重要API接口已被加密 [参考文档](https://jaedoq3bux.feishu.cn/docx/Diavddup9oB08Ax8di6c2gU1nnd)。
#### 系统结构
```
|----> UserManager ---------|
-------------- | | ------> SocketRedisManager
webchat-client -------> SocketEndpoint -------|----> AuthnManager --------|
-------------- |
|----> MessageParser
⇑
[webchat-core] |---> message
⇓ | | ------> BaiduSpeech
|---> resource --------|
-------------- | | ------> ResourceStorage
webchat-server --------|---> group
-------------- | |---> admin
|---> user ------------|
| |---> owner
| | ------> WX
|---> login ----------> shiro ----------|
| ------> QQ
| -----> CamouflagePublicKey
| ---> Exchange -------|
-------------- | | -----> SignatureGenerator
webchat-secure --------| | -----> MappedRepeatValidator
-------------- | | ----> RepeatValidator --------|
| ---> Validator ----> SecureRequestFilter-----| | -----> RedisRepeatValidator
| ----> SignatureValidator
```
消息解析器
```
| ------> UserMessageHandler --------> GroupMessageHandler
|
[MessageParser] ------> BaseMessageHandler -----|
| | -------> SysMessageHandler
| ------> BaseSysMessageHandler ------|
| -------> WebRTCMessageHandler
```
命令解析器
```
| -----> GroupCommand ------------> GroupManager
|
| |------> GroupManager
[ConsumerListener] -----> CommandHandler -------| -----> UserCommand ------|
| |------> UserManager
| | ------> GroupManager
| -----> AuthnCommand ------------> AuthnManager ------|
| ------> UserManager
```
推荐JDK11
* 后端:Spring Boot、Spring Cloud、Mybatis Plus、Shiro、MySQL、Redis、Kafka、Netty、Nacos、OpenFeign
#### 依赖及功能
* MySQL 5.7.1
数据持久化储存,包括聊天记录、用户信息、操作日志等
* Redis 7.0.4
未读消息计数
Token令牌缓存及验证
所有者权限扩展
公告储存
ResourceURL资源缓存
屏蔽列表缓存
微信UUID缓存及验证
禁言限制登陆标记
刷屏统计
Session持久化
* Kafka 3.0.1 Topic
MESSAGE - 聊天记录
LOGGER - 日志推送
USER_COMMAND - 用户相关命令
GROUP_COMMAND - 群组相关命令
AUTHN_COMMAND - 权限相关命令
RESATRT - 重启client服务器(同步缓存)
* Nacos 2.2.0
注册中心
配置中心
* 系统邮箱账号
用于修改密码/找回密码功能发送验证码
* 微信公众号
微信快捷登录功能
* AList/FTP
文件持久化储存
#### 引用
[[AList] 一个支持多种存储的文件列表程序](https://github.com/alist-org/alist)
[[netty-websocket-spring-boot-starter] 基于netty的轻量级的高性能socket服务器](https://github.com/YeautyYE/netty-websocket-spring-boot-starter)
#### 通用能力说明
* @WeChatRedirect - 微信登录重定向标记,标记此注解的方法将对外开放[GET]请求并允许跨域,通过WxAuth2Request扫描控制器标记的注解,动态配置微信授权地址
* @Encrypted - 内置的API请求加密模块标记,用于标记在重要的控制器类或方法上,将进行一系列安全验证以及解密操作,失败返回404错误
* @OpenAPI - 对服务开放的请求标记,标记在控制器必须提供请求头的指定密钥才能访问,密钥仅存在服务端,所以用户无法访问标记的API并返回404错误
* ResourceStorage - 通用资源储存接口,默认实现了两种(AList,FTP),可根据业务需求手动实现储存方式(如FastDFS),Spring会优先装配自定义实现的Bean
* CommandHandler - 系统命令处理接口,通过命令枚举和Bean名匹配的方式动态执行命令,也可指定@Command注解手动匹配命令
#### 现支持的功能
#### 登录
* 邮箱/UID登录
* 微信登陆
* QQ登录
* 异地登录检查
* 通过邮箱注册
* 找回密码
#### 用户
* 添加好友(未来)
* 查看资料
* 修改个人资料(包括头像)
* 修改密码(未绑定邮箱无法修改密码)
* 修改邮箱
* 私聊(切换私聊的用户,将已读非语音的所有消息)
* 屏蔽(包括通话功能)
* 禁言(1秒-7天,管理员权限)
* 限制登录(1秒-30天,管理员权限)
* 设置头衔(所有者权限)
* 设置管理员(所有者权限)
* 移除消息(通过消息ID,所有者权限)
* 永久限制登录(通过UID,所有者权限)
* 发布公告(所有者权限)
#### 用户在线状态监控说明(头像右下角标识)
* 绿色:用户在线
手机端:用户正在浏览当前页面
电脑端:鼠标在页面中
* 黄色:繁忙
手机端:浏览其他网页,浏览器切到后台,锁屏3秒均会触发
电脑端:鼠标离开页面1分钟触发
* 红色:离开
手机端:当前页面无任何触摸操作 (因部分安卓系统后台限制,网页切到后台/锁屏后计时器将被阻塞)
电脑端:鼠标在页面未移动或移出页面10分钟后触发
* 灰色头像无标识:离线
发送的消息将被离线保存
#### 群组
* 创建,加入,退出,解散群组
* 设置入群密码
* 群内踢人(未来)
* 修改群资料(未来)
* 入群审核(未来)
* 转让群(未来)
#### 消息
* 支持文字,Emoji,图片,语音,视频,文件消息
* 聊天记录离线保存
* 未读消息显示数量(最大99)
* 已读指定用户的所有消息(包括语音消息)
* 未读语音消息红点提示
* 撤回消息(2分钟以内)
* 移除消息
* 设为背景(仅图片消息)
* 设为来电铃声(仅音乐类型文件)
* 语音转文字(来自百度识别API)
* 复制文字
* 保存文件
* 视频预览
* 音乐文件播放
* 清空所有消息
#### 媒体(需要HTTPS协议)
* 录制视频
* 视频通话
* 语音通话
#### 其他
* 修改背景图片
* 修改气泡颜色
* 切换主题
* 桌面消息通知(需要浏览器支持)
* 消息声音
* 消息震动(仅手机)
* 来电铃声
* 全屏
* 读取粘贴板图片
* 文件拖拽支持
* 所有者接入小冰机器人
* 敏感关键词屏蔽
* 全员禁言
* ...