Appearance
系统架构
99客服是单体 PHP 应用:业务请求由 Webman Controller 处理,实时下行由独立 Socket 进程负责。浏览器端的聊天和工作台使用 HTTP 读写数据,并使用 WebSocket 接收服务端事件。
整体架构
text
┌──────────────────────────────┐
│ Agent / Visitor Client │
└───────┬─────────────────↑────┘
│ │
HTTP WebSocket
│ │
┌─────────v──┐ ┌──┴─────────┐
│ Webman │ HTTP │ Webman │
│ Controller │ ─────────>│ Socket │
└──────┬─────┘ └────────────┘
│
┌──────────────┴──────────────┐
v v
┌────────────────────┐ ┌───────────┐
│ MySQL / PostgreSQL │ │ Session │
└────────────────────┘ └───────────┘| 组件 | 职责 |
|---|---|
| Web 客户端 | 访客聊天页和客服工作台。通过 HTTP 调用业务接口、通过 WebSocket 接收状态变化。 |
| Webman Controller | 身份校验、会话分配、消息读写、上传、注册登录等业务入口。 |
| Socket 进程 | 维护 WebSocket 连接、频道订阅和事件广播。 |
| ThinkORM | 访问 MySQL 或 PostgreSQL,持久化访客、客服、会话与消息。 |
| Session | 保存客服工作台的登录身份;访客业务接口使用 Bearer Token。 |
WebSocket 长连接架构
text
┌──────────────┐
┌─────────http────>| Controller ├──────┐
│ └──────────────┘ │
┌────────┐ │
│ Client │ http
└────────┘ │
↑ ┌──────────────┐ │
└────websocket─────| Socket服务 |<─────┘
└──────────────┘- 浏览器先通过 HTTP 取得
ws_address、appkey和频道信息。 - 浏览器连接 Socket 服务并订阅自身频道。
- Controller 完成落库后调用
app\service\Push。 Push通过内部 HTTP 调用 Socket 服务,将事件发送给订阅客户端。
HTTP 是业务事实来源。WebSocket 只做实时同步;断线重连后必须重新订阅,并通过消息历史接口用 mid 补齐遗漏消息。