# 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协议) * 录制视频 * 视频通话 * 语音通话 #### 其他 * 修改背景图片 * 修改气泡颜色 * 切换主题 * 桌面消息通知(需要浏览器支持) * 消息声音 * 消息震动(仅手机) * 来电铃声 * 全屏 * 读取粘贴板图片 * 文件拖拽支持 * 所有者接入小冰机器人 * 敏感关键词屏蔽 * 全员禁言 * ...