GatewayWorker使用说明,反正我能看懂,你们加油

531 阅读2分钟

第一步 下载 GatewayWorker

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)
绑定系统用户idbindUid(client_id, $req_data[‘uid’])
判断系统id是否在线isUidOnline($uid)
解除绑定uidunbindUid(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对象
   
};