1 引言
上一小節,我們瞭解了一下開發客服系統的思路,所以本小節咱們就開門見山的來講吧,這一小節我們會接觸幾個開發過程中常見的一個函數,其它沒有講到的可以看下官方文檔的說明哦。
2 項目的目錄結構
下載解壓後的目錄如下:
.
├── Applications // 應用項目
│ └── YourApp // 其中一個項目目錄,目錄名可以自定義
│ ├── Events.php // 處理業務邏輯
│ ├── start_gateway.php // gateway進程啓動腳本,包括端口號等設置
│ ├── start_businessworker.php // businessWorker進程啓動腳本
│ └── start_register.php // 註冊服務啓動腳本
│
├── start.php // 全局啓動腳本
│
└── vendor // GatewayWorker框架和Workerman框架源碼目錄
由於我們是使用websocket協議來開發客服系統的,所以我們得先把協議修改爲websocket,修改如下所示:
3 啓動應用
在window開發的同學可以雙擊start_for_win.bat來啓動應用,在Linux或Mac開發的同學可以使用命令php start.php stort來啓動應用,如果沒有報錯的話,那說明配置沒問題,接下來就可以進入開發階段了
window下正常啓動後的效果
4 處理業務邏輯
GatewayWorker的業務邏輯都有Events.php來處理,也就是說在開發過程中我們只需要關注該文件即可。
4.1 Events類中的回調函數
當businessWorker進程啓動時觸發
void Event::onWorkerStart(Worker $businessWorker);
當客戶端連接上gateway進程時觸發。
void Events::onConnect(string $client_id);
當收到一個客戶端請求後觸發
void Events::onMessage(string $client_id, mixed $recv_data);
客戶端與Gateway的連接斷開時觸發。
void Events::onClose(string $client_id);
當businessWorker進程退出時觸發。
void Event::onWorkerStop(Worker $businessWorker);
在開發客服系統的過程中,各個回調函數所處理的邏輯
onWorkerStart:初始化數據(數據庫連接)或啓動定時任務(數據統計)等
onConnect:過濾連接,比如不讓還名單的訪客連接到客服系統
onMessage:處理主要的業務邏輯(訪客及客服的初始化、轉發聊天數據、轉接訪客、評價等)
onClose:用戶離線或客服離線後的處理
onWorkerStop:不處理可留空
4.2 Gateway類
向客戶端client_id發送數據
void Gateway::sendToClient(string $client_id, string $send_data);
將client_id與uid綁定
void Gateway::bindUid(string $client_id, mixed $uid);
判斷$uid
是否在線
int Gateway::isUidOnline(mixed $uid);
向uid綁定的所有在線client_id發送數據
void Gateway::sendToUid(mixed $uid, string $message);
將client_id加入某個組
void Gateway::joinGroup(string $client_id, mixed $group);
將client_id從某個組中刪除
void Gateway::leaveGroup(string $client_id, mixed $group);
向某個分組的所有在線client_id發送數據
void Gateway::sendToGroup(mixed $group, string $message [, array $exclude_client_id = null [, bool $raw = false]]);
sendToClient:客服連接到客服系統時可以給該訪客發送一些歡迎信息等
bindUid:將訪客的client_id與用戶ID綁定,方便與現有的系統業務結合
isUidOnline:判斷訪客是否在線,如果不在線的話可以將該信息設爲未讀信息
sendToUid:根據uid給訪客發送數據
joinGroup:加入某個分組,推薦一個客服一個分組,這樣客服就可以給自己服務的訪客廣播消息
leaveGroup:離開某個分組,做轉接功能時,可以將該訪客從當前分組中刪除,然後在加入轉接後的分組
sendToGroup:給當前分組廣播消息
Gateway類提供的接口還有其它的,這裏筆者只列出了開發客服系統中常見的幾個
小結
本小節就先介紹到這裏了,下一小節我們來了解一下如何通過JS連接到GatewayWorker