尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

Fiora 变更日志深度解读:从 2020-11 到 2021-6 的版本演进与源码实现剖析

Fiora 变更日志深度解读:从 2020-11 到 2021-6 的版本演进与源码实现剖析 即时通讯后端前端移动开发【免费下载链接】fioraAn interesting open source chat application. Developed with node.js, mongoDB, socket.io and react项目地址https://gitcode.com/gh_mirrors/fi/fiora点击查看免费下载Fiora 是一款基于 Node.js、MongoDB、Socket.io 与 React 的开源聊天应用。本文以 CHANGELOG 为脉络逐条梳理 2020 年 11 月至 2021 年 6 月间的重要版本演进并结合 服务端配置、客户端配置、中间件 与 路由实现 等源码讲清每项变更背后的设计动机与实现原理帮助读者理解 Fiora 的架构演化并掌握对应功能的配置与使用方式。一、版本演进全景CHANGELOG 记录的时间跨度约 8 个月2020-11-03 至 2021-6-24共 20 余条变更。按主题可归纳为四类主题分类代表变更对应源码位置配置体系重构Redis 缓存替代内存缓存Breaking配置改为环境变量驱动阿里云 OSS 替换七牛 CDNserver.ts、client.ts安全与权限修复管理员误判搜索关键词正则转义单 IP 注册限额只限制发消息频率isAdmin.ts、frequency.ts、user.ts消息能力增强支持撤回消息、直接发送文件、服务端计算未读数、URL 识别支持 localhost/IP、App 推送通知message.ts、convertMessage.ts前端与构建Service Worker 生成方式重构、iOS 全屏适配、webpack 构建进度条、npm 脚本重命名web 端构建配置下面按时间线完整列出每条变更随后分主题深入剖析实现细节。二、完整时间线按原文逐条继承2021-6-24支持包含日文字符的用户名与用户标签。2021-5-11使用阿里云 OSS 替代七牛 CDN 存储资源。2021-3-24修复搜索功能允许正则表达式匹配的问题。2021-3-14支持由服务端计算未读消息数量。2021-3-2识别消息中的 URL 时支持 host 为 localhost 或 IP 地址。2021-3-1不再限制管理员创建的群组数量。2021-2-28允许多个用户共用同一个通知推送 token。2021-2-27修改 App 通知内容自己发送的消息不再向自己推送通知webpack 生产构建时显示进度条。2021-2-25支持向 Fiora App 推送通知。2021-2-21重要修复——服务端判断管理员时逻辑错误曾把所有人当作管理员。2021-2-17支持在群组外部共享群组邀请。2021-1-26修复文件消息大小计算错误。2021-1-22单个 IP 在 24 小时内最多注册 3 个账号。2020-12-17支持按输入内容搜索表情包默认关闭可在设置中开启只限制发送消息的频率。2020-12-08Breaking!!!重构为使用 Redis 缓存替代内存变量缓存启动 Fiora 前必须先运行 Redis。2020-11-15重构为使用 webpack 插件生成 Service Worker 脚本重构或新增服务端脚本。2020-11-14适配 iOS 全屏设备。2020-11-12支持多个管理员新增 getUserId 与 deleteUser 脚本。2020-11-08支持撤回自己发送的消息。2020-11-07支持直接发送文件支持实时显示联系人信息用户在线状态与群组在线成员数重构 webpack 构建配置修复图片查看器右键复制图片导致其关闭的问题。2020-11-04Breaking!!!修改配置文件机制不再支持通过命令行参数修改配置项移除 pm2 ecosystem 配置与部署 shell 脚本。2020-11-03重命名部分 npm scripts。三、配置体系重构从命令行参数到环境变量与 Redis3.1 Breaking配置改由环境变量驱动2020-11-04 的变更宣告了配置机制的重大调整不再支持通过命令行参数修改配置项并移除了 pm2 ecosystem 配置与部署 shell 脚本。从当前 server.ts 与 client.ts 的源码可以看到所有配置项均通过process.env.XXX读取并附带合理默认值Host/Port服务端监听地址与端口默认取本机 IP 与9200DatabaseMongoDB 连接串默认mongodb://localhost:27017/fioraRedisHost/RedisPortRedis 地址与端口默认localhost:6379JwtSecretJWT 加密密钥MaxGroupCount单个用户可创建群组上限默认3Administrator管理员用户 ID 列表用逗号分隔DisableRegister/DisableCreateGroup分别控制是否禁用注册与建群。客户端配置同样以环境变量驱动例如MaxImageSize默认 5MB、MaxFileSize默认 10MB、DefaultTheme默认cool等。这意味着部署时只需在进程环境中注入变量即可完成定制不再依赖命令行传参。3.2 BreakingRedis 缓存替换内存缓存2020-12-08 的变更要求所有部署方先运行 Redis 再启动 Fiora。这一改动可从多个中间件中看出端倪频率限制中间件 中引入了Redis.has/Redis.set判断新用户并写入自动封禁记录注册路由 中用 Redis 记录新用户标记与 IP 注册计数Redis 的初始化逻辑集中在 initRedis.ts。相比进程内存变量Redis 让计数与状态在多实例部署下共享且可持久化这是支撑限流、封禁、未读统计等功能稳定运行的基础设施变更。3.3 阿里云 OSS 替换七牛 CDN2021-5-11 将资源存储从七牛 CDN 切换为阿里云 OSS。配置块位于 server.ts环境变量含义ALIYUN_OSS是否启用 OSStrue启用ACCESS_KEY_IDAccessKey IDACCESS_KEY_SECRETAccessKey SecretROLE_ARNSTS 角色 ARN用于临时凭证REGIONOSS 区域BUCKET存储桶名称ENDPOINT服务端点启用后图片、文件等上传资源改由 OSS 托管减轻自建服务器带宽压力。四、安全与权限修复关键 Bug 与防护机制4.1 管理员判定逻辑修复2021-2-21ImportantCHANGELOG 特别标注了这次重要修复服务端曾把所有用户都当作管理员。当前 isAdmin.ts 的正确实现为socket.data.isAdmin !!socket.data.user config.administrator.includes(socket.data.user);即通过config.administrator逗号分隔的用户 ID 数组见 server.ts精确匹配。同时该中间件用requireAdminEvent集合保护sealUser、resetUserPassword、setUserTag、sealIp、toggleSendMessage等管理接口非管理员调用会收到你不是管理员错误。4.2 支持多个管理员与配套脚本2020-11-12正因为administrator是数组而非单个 IDFiora 天然支持多管理员。同期新增的getUserId与deleteUser服务端脚本可查看 服务端 package.json 的 scripts 定义为管理员运营提供了按用户名查 ID、删除用户的运维能力。4.3 单 IP 24 小时限注册 3 个账号2021-1-22实现位于 user.ts注册前读取getNewRegisteredUserIpKey(ctx.socket.ip)对应的 Redis 计数若 24 小时内Redis.Day过期时间已达 3 次则拒绝注册。IP 通过 socket.ts 中的getSocketIp从x-real-ip或连接地址解析防止通过代理伪造时至少有一层兜底。4.4 只限制发消息频率2020-12-17CHANGELOG 明确Only limit send message frequency。对照 frequency.ts中间件只对sendMessage事件生效其他事件直接放行。限流策略为新用户每分钟最多 5 条NewUserMaxCallPerMinutes老用户每分钟最多 20 条MaxCallPerMinutes超限后自动封禁 5 分钟AutoSealDuration新用户标记通过 Redis 的getNewUserKey记录注册后保留一天。该中间件在 app.ts 中以isLogin → isAdmin → frequency → registerRoutes的顺序挂载。4.5 修复搜索的正则注入问题2021-3-24系统路由 中的search接口在接收关键词后会进行 trim 与空值校验。此变更修复了关键词被当作正则表达式执行的安全隐患改为按字面匹配避免恶意构造的表达式导致异常查询或绕过预期行为。五、消息能力增强撤回、文件、URL 识别与未读数5.1 撤回自己的消息2020-11-08服务端删除接口 deleteMessage 的判断为默认禁止普通用户撤回客户端配置 disableDeleteMessage默认false即禁止管理员始终可撤回。撤回后服务端广播deleteMessage事件前端在 convertMessage.ts 中将被撤回的消息转换为乌贼娘殿下 撤回了消息的系统样式消息。5.2 直接发送文件与大小计算修复2020-11-07 / 2021-1-262020-11-07 支持在聊天中直接发送文件2021-1-26 修复了文件消息大小计算错误。文件大小上限由客户端配置MaxFileSize控制默认 10MB见 client.ts上传走 web 端 uploadFile 工具。5.3 URL 识别支持 localhost 与 IP2021-3-2消息中的 URL 会被识别并渲染为可点击链接。此变更扩展了链接 host 的判定范围使http://localhost:xxxx、http://192.168.x.x等内网/本地地址也能被正确识别不再局限于域名形式方便自建部署环境下分享链接。5.4 服务端计算未读消息数2021-3-14在 message.ts 中拉取历史消息的响应数据结构包含unread字段服务端根据历史记录索引historyMap[linkmanId]对比消息列表位置计算未读数量无历史记录时返回 100客户端无需自行比对即可展示未读角标减少端侧逻辑并保证多端一致。5.5 App 推送通知2021-2-25 / 2021-2-27 / 2021-2-28这三次变更共同完善了移动端推送体系2021-2-25新增向 Fiora App 推送通知的能力核心函数 pushNotification 遍历用户的notificationToken按文本消息内容或[类型]形式构造通知标题与正文2021-2-27自己发送的消息不再推送给自己message.ts 中有明确注释Messages sent by yourself dont push notification to yourself并统一调整通知展示内容2021-2-28允许多个用户共用同一个通知 token适配同一设备多账号登录的场景。六、群组、搜索与前端体验改进6.1 管理员建群不再受限2021-3-1建群校验在 group.ts普通用户可创建的群组数受MaxGroupCount默认 3限制而ctx.socket.isAdmin为真时跳过该限制即不再限制管理员创建的群组数量。6.2 群组外部共享与实时在线信息2021-2-17 / 2020-11-07群组外部共享通过群邀请消息对应 web 端 InviteMessageV2.tsx实现允许把群组邀请链接分享给群外用户实时联系人信息联系人列表可实时显示用户在线状态与群组在线成员数由服务端通过 socket 事件下发。6.3 表情包搜索2020-12-17服务端 searchExpression 会携带关键词去搜狗图片表情接口抓取资源客户端默认关闭该功能用户需在设置中手动开启后才能在输入内容时按关键词检索表情包。6.4 构建与移动端适配2020-11-07 ~ 2020-11-15Service Worker 脚本改用 webpack 插件生成2020-11-15简化 PWA 缓存脚本的维护webpack 生产构建显示进度条2021-2-27长构建时便于观察状态iOS 全屏设备适配2020-11-14处理刘海屏安全区域与全屏显示图片查看器右键复制不再误关闭2020-11-07。七、升级与运维建议综合以上演进若要将部署环境升级到 CHANGELOG 所覆盖的最终状态需要注意必须先启动 Redis2020-12-08 Breaking 变更并配置 server.ts 中的RedisHost/RedisPort通过环境变量而非命令行参数配置2020-11-04 Breaking 变更管理员列表用Administratoruid1,uid2方式声明若使用对象存储按 阿里云 OSS 配置块 补齐ALIYUN_OSS与凭证类变量出于安全考虑保留默认的disableDeleteMessage禁止普通用户撤回与单 IP 注册限制管理员不受撤回限制影响见 deleteMessage通过设置面板按需开启表情包搜索并知悉其依赖外部接口。结语从 2020-11 到 2021-6 的这轮迭代勾勒出 Fiora 从单机内存缓存 命令行参数配置走向Redis 基础设施 环境变量驱动 多管理员权限模型 移动推送的演进路径同时也包含多起安全性修复管理员误判、正则注入、注册滥用。对照 英文版 CHANGELOG、服务端配置 与 核心路由 阅读本文可快速定位每个历史变更在代码库中的落点为自建部署、二次开发与安全加固提供直接参考。赞分享即时通讯后端前端移动开发【免费下载链接】fioraAn interesting open source chat application. Developed with node.js, mongoDB, socket.io and react项目地址https://gitcode.com/gh_mirrors/fi/fiora点击查看免费下载相关推荐从变更日志到源码实现mtdowling/cron-expression 的版本演进与 PHP Cron 表达式解析器深度剖析从变更日志到源码实现mtdowling/cron expression 的版本演进与 PHP Cron 表达式解析器深度剖析 导读本文以 samples/d示例工程数据库教程后端go.uber.org/multierr 变更日志深度解读从 v0.1.0 到 v1.11.0 的 API 演进与源码实现go.uber.org/multierr 变更日志深度解读从 v0.1.0 到 v1.11.0 的 API 演进与源码实现 本篇以 Grafana Tempo后端可观测性链路追踪ncspot 变更日志深度解读从 0.11.1 到 1.3.4 的演进脉络与关键实现剖析ncspot 变更日志深度解读从 0.11.1 到 1.3.4 的演进脉络与关键实现剖析 ncspot 是一款使用 Rust 编写、基于 librespot网页爬虫工作流自动化上一篇洛雪音乐音源配置实战指南从零搭建一套多平台无损音乐聚合方案下一篇Mist终极指南轻松管理macOS固件和安装程序创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表