PHP开发客服系统GatewayWorker篇
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