Skip to content

系统架构

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服务 |<─────┘
                         └──────────────┘
  1. 浏览器先通过 HTTP 取得 ws_addressappkey 和频道信息。
  2. 浏览器连接 Socket 服务并订阅自身频道。
  3. Controller 完成落库后调用 app\service\Push
  4. Push 通过内部 HTTP 调用 Socket 服务,将事件发送给订阅客户端。

HTTP 是业务事实来源。WebSocket 只做实时同步;断线重连后必须重新订阅,并通过消息历史接口用 mid 补齐遗漏消息。