欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PHP开发客服系统GatewayWorker篇

程序员文章站 2022-05-19 20:57:12
...

1 引言

上一小节,我们了解了一下开发客服系统的思路,所以本小节咱们就开门见山的来讲吧,这一小节我们会接触几个开发过程中常见的一个函数,其它没有讲到的可以看下官方文档的说明哦。 

开发文档:http://workerman.net/gatewaydoc/  

 

2 项目的目录结构

下载地址:https://www.workerman.net/download

 PHP开发客服系统GatewayWorker篇

下载解压后的目录如下:

.
├── Applications // 应用项目
│   └── YourApp  // 其中一个项目目录,目录名可以自定义
│       ├── Events.php                 // 处理业务逻辑
│       ├── start_gateway.php          // gateway进程启动脚本,包括端口号等设置
│       ├── start_businessworker.php   // businessWorker进程启动脚本
│       └── start_register.php         // 注册服务启动脚本
│
├── start.php // 全局启动脚本
│
└── vendor    // GatewayWorker框架和Workerman框架源码目录

 由于我们是使用websocket协议来开发客服系统的,所以我们得先把协议修改为websocket,修改如下所示:

PHP开发客服系统GatewayWorker篇

3 启动应用 

在window开发的同学可以双击start_for_win.bat来启动应用,在Linux或Mac开发的同学可以使用命令php start.php stort来启动应用,如果没有报错的话,那说明配置没问题,接下来就可以进入开发阶段了

 PHP开发客服系统GatewayWorker篇

 window下正常启动后的效果

 PHP开发客服系统GatewayWorker篇

 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