文档:清理旧 ASP/数据导入相关内容,重写注意事项为全新项目视角
This commit is contained in:
@@ -1,7 +1,6 @@
|
||||
# ChatRoom 开发计划与注意事项
|
||||
|
||||
> **技术栈**:Laravel 12 · PHP 8.4 · Laravel Reverb (WebSocket) · Redis · MySQL 8.0 · Laravel Horizon
|
||||
> **原项目**:`/Users/pllx/Web/chat/hp0709`(VBScript ASP + MS Access 聊天室)
|
||||
> **目标域名**:`http://chatroom.test`(Herd 自动配置)| `https://chat.ay.lc`(生产环境)
|
||||
|
||||
---
|
||||
@@ -463,8 +462,6 @@ routes/
|
||||
- [ ] **滚动公告管理**(后台 CRUD,`ScrollAd` 模型已建,界面待完成)
|
||||
- [ ] **好友系统**(`FriendCall` / `FriendRequest` 模型已建,Controller 待完成)
|
||||
- [ ] **婚姻系统**(`Marriage` 模型已建,界面待完成)
|
||||
- [ ] **历史数据迁移**(从 Access 导入旧用户数据:GBK→UTF-8 转换)
|
||||
- [ ] **密码兼容过渡**(旧 MD5 用户登录时自动升级为 bcrypt)
|
||||
- [ ] **单元测试**(核心 Service 层测试覆盖率)
|
||||
- [ ] **Flash 游戏替代**(`game/`、`pig/` 等 .swf 文件,考虑 HTML5/Canvas 重写)
|
||||
|
||||
@@ -472,39 +469,32 @@ routes/
|
||||
|
||||
## 七、注意事项
|
||||
|
||||
### 7.1 密码兼容策略
|
||||
### 7.1 密码策略
|
||||
|
||||
- 导入旧数据时,`password` 字段存原始 MD5 值(32位字符串)
|
||||
- 登录时双模式验证:`md5($input) === $storedPass` 成功后升级为 `bcrypt`
|
||||
- 新注册用户直接用 `bcrypt`(`Hash::make()`)
|
||||
- 所有用户密码使用 `bcrypt`(`Hash::make()`)
|
||||
- 登录时使用 `Hash::check()` 验证
|
||||
|
||||
### 7.2 字符编码
|
||||
### 7.2 实时推送机制
|
||||
|
||||
- 原 Access 数据库为 **GBK 编码**
|
||||
- 所有 MySQL 表必须 `utf8mb4_unicode_ci`
|
||||
- 导入历史数据前转换:
|
||||
```bash
|
||||
iconv -f GBK -t UTF-8 原文件.csv > 目标文件_utf8.csv
|
||||
```
|
||||
**聊天室所有状态变更均通过 Reverb WebSocket 广播**,无需轮询刷新。
|
||||
|
||||
### 7.3 REFRESH.ASP 已废弃
|
||||
> [!NOTE]
|
||||
> 历史上基于 `<meta http-equiv=refresh>` 的 6秒刷新方案已被完全取代,任何涉及聊天室状态更新的功能都应通过 Event → Broadcasting 实现,**禁止在实现中引入轮询逻辑**。
|
||||
|
||||
原系统的 6 秒 `<meta http-equiv=refresh>` **完全由 Reverb WebSocket 实时推送取代**,无需任何轮询逻辑。
|
||||
### 7.3 Redis 状态层设计
|
||||
|
||||
### 7.4 Application 对象替代
|
||||
| 数据 | Redis Key 格式 | 说明 |
|
||||
| ------------ | ------------------------- | -------------------------- |
|
||||
| 在线用户列表 | `room:{id}:users` Hash | 值为用户信息 JSON |
|
||||
| 消息环形缓冲 | `room:{id}:messages` List | 最多保留 200 条 |
|
||||
| 房间基本信息 | `room:{id}:info` String | JSON 快照 |
|
||||
| 并发锁 | `Cache::lock("key", 10)` | 使用 `->block(5, fn)` 实现 |
|
||||
|
||||
| 原 ASP | Laravel 替代 |
|
||||
| ------------------------------- | --------------------------------------------- |
|
||||
| `Application("_user_list")` | `Redis::hgetall("room:{id}:users")` |
|
||||
| `Application("_says")` 环形缓冲 | `Redis::lrange("room:{id}:messages", 0, 199)` |
|
||||
| `Application("_room_list")` | `Redis::get("room:{id}:info")` + `rooms` 表 |
|
||||
| `Application.Lock/Unlock` | `Cache::lock("key", 10)->block(5, fn)` |
|
||||
|
||||
### 7.5 Flash 游戏(暂不处理)
|
||||
### 7.4 Flash 游戏(暂不处理)
|
||||
|
||||
`game/`、`pig/`、`Gupiao/` 等目录内的 `.swf` Flash 文件现代浏览器已不支持,**本期不做转换**。
|
||||
|
||||
### 7.6 AI 机器人多厂商支持
|
||||
### 7.5 AI 机器人多厂商支持
|
||||
|
||||
`AiChatService` 支持以下 Provider,通过 `ai_provider_configs` 后台配置切换:
|
||||
|
||||
@@ -514,7 +504,7 @@ routes/
|
||||
| `deepseek` | `deepseek-chat` | 国产低成本,兼容 OpenAI 接口 |
|
||||
| `gemini` | `gemini-1.5-flash` | Google Gemini |
|
||||
|
||||
### 7.7 商店商品类型说明
|
||||
### 7.6 商店商品类型说明
|
||||
|
||||
| type | slug 示例 | 说明 |
|
||||
| ---------- | ---------------- | ---------------------- |
|
||||
@@ -524,7 +514,7 @@ routes/
|
||||
|
||||
---
|
||||
|
||||
### 7.8 积分流水系统 — 开发者使用指南 ⭐
|
||||
### 7.7 积分流水系统 — 开发者使用指南 ⭐
|
||||
|
||||
> [!IMPORTANT]
|
||||
> **铁律**:所有涉及修改用户 `exp_num`(经验)、`jjb`(金币)、`meili`(魅力)的操作,
|
||||
@@ -675,8 +665,3 @@ php artisan horizon:terminate
|
||||
# 清理所有缓存
|
||||
php artisan optimize:clear
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
> 原 ASP 源码参考路径:`/Users/pllx/Web/chat/hp0709/`
|
||||
> 数据库 SQL 参考:`/Users/pllx/Web/chat/hp0709_php/database.sql`
|
||||
|
||||
Reference in New Issue
Block a user