第一步 下载 GatewayWorker
https://www.workerman.net/download
第二步 把GatewayWorker放在项目目录下
启动的时候可能遇见各种报错,原因是:php的扩展或者禁用函数,还有端口号的问题
目录结构
├── Applications // 这里是所有开发者应用项目
│ └── YourApp // 其中一个项目目录,目录名可以自定义
│ ├── Events.php // 开发者只需要关注这个文件
│ ├── start_gateway.php // gateway进程启动脚本,包括端口号等设置
│ ├── start_businessworker.php // businessWorker进程启动脚本
│ └── start_register.php // 注册服务启动脚本
│
├── start.php // 全局启动脚本,此脚本会依次加载Applications/项目/start_*.php启动脚本
│
└── vendor // GatewayWorker框架和Workerman框架源码目录,此目录开发者不用关心
第三步 修改 Applications/YourApp/start_gateway.php下的端口和域名ip的设置
第四步 在 Applications/YourApp/Events.php创建消息发送逻辑过程
/**
* 当Worker启动时
* @param integer $client_id 客户端id
*/
public static function onWorkerStart($client_id) {
}
/**
* 有消息时
* @param int $client_id
* @param mixed $message
*/
public static function onMessage($client_id, $message)
{
}
/**
* 当客户端断开连接时
* @param integer $client_id 客户端id
*/
public static function onClose($client_id) {
}
常用函数
代码 | 注释 |
发给所有用户 向用户发送数据 | sendToAll(数据); |
向client_id发送数据 | sendToClient(client_id, 数据); |
判断是否在线 | isOnline(client) |
绑定系统用户id | bindUid(client_id, $req_data[‘uid’]) |
判断系统id是否在线 | isUidOnline($uid) |
解除绑定uid | unbindUid(client_id, $req_data[‘uid’]) |
向该uid用户发送数据 | sendToUid($req_data[‘uid’], 数据); |
加入组 | joinGroup(client_id, 群组) |
踢出组 | leaveGroup(client_id, 群组); |
向组内所有人发送记录 | sendToGroup(群组, 数据) |
如果是获取当前请求所属client_id的session, | 直接使用$_SESSION变量即可。 |
如果想获取任意client_id的session, | 可以通过Gateway::getSession($client_id)获取。 |
class Events
{
public static function onMessage($client_id, $data)
{
// session中没有uid,说明没用绑定uid,执行uid绑定并存储uid到session
if (!isset($_SESSION['uid'])) {
// 一般是根据$data获取uid,这里为了演示方便随机生成uid
$uid = rand(1, 10000);
// uid用session存储起来,避免重复绑定
$_SESSION['uid'] = $uid;
// 绑定uid
Gateway::bindUid($client_id, $uid);
// 通知客户端uid生成并存储成功
return Gateway::sendToClient($client_id, 'uid设置成功'.$uid);
}
// session中有uid,证明已经绑定过uid
return Gateway::sendToClient($client_id, '你的uid为'.$_SESSION['uid']);
}
}
第五步 在调用页面写逻辑语言
ws = new WebSocket("ws://your_domain.com:7272");// 服务端主动推送消息时会触发这里的onmessage前端发送数据
ws.send(字符串数据);
ws.onmessage = function(e){
// json数据转换成js对象
};