count = 1; /** * 同步登录用户列表 */ // 当收到客户端发来的数据后 $ws_worker->onMessage = function($connection, $data) { $connection->lastMessageTime = time(); global $ws_worker; if(preg_match('/^admin_login:(\w{2,20})/i',$data,$result)){ //代表是客户端认证 $ip=$result[1]; //通过全局变量获得db实例 $connection->send('admin_login_ip '.$ip); //普通消息 echo $ip.'==>'.$result[1].'==>login2'.PHP_EOL; //这是为了演示,控制台打印信息 $connection->id=$ip; }elseif(preg_match('/^user_login:(\w{2,20})/i',$data,$result)){ //代表是客户端认证 //通过全局变量获得db实例 $ip=$result[1]; $connection->send('user_login_ip'.$ip); //普通消息 echo $ip .'==>'.$result[1].'==>login2'.PHP_EOL; //这是为了演示,控制台打印信息 $connection->id=$ip; }elseif (preg_match('/^chat:\<(.*?)\>:(.*?)/isU',$data,$msgset)){ //客服发送消息 $admin_ip = $msgset[1]; $msg = $msgset[2]; foreach ($ws_worker->connections as $k=>$v){ if($v->id==$admin_ip) { echo $v->id.':'.$admin_ip.PHP_EOL; $v->send('msg:'.$msg); } } }elseif (is_array(json_decode($data,'true'))) { //vip发送消息 $res=json_decode($data,'true'); $admin_ip=$res['admin_ip']; //$abc->gett($admin_ip)['conn']->send($data); //$ws_worker->connections[$admin_ip]->send('msg:'.$data); //$GLOBALS['clients'][$admin_ip]['conn']->send('msg:'.$data); //$ws_worker->m_iparry[$admin_ip]['conn']->send($data); foreach ($ws_worker->connections as $k=>$v){ if($v->id==$admin_ip) { echo $v->id.'::'.$admin_ip.PHP_EOL; $v->send($data); } } } //设置连接的onClose回调 $connection->onClose = function($connection) //客户端主动关闭 { // $connection->send('reload_connection'); // var_dump($connection); // $close_id=$connection->worker->id; // var_dump($close_id); echo "connection closed\n"; // foreach ($ws_worker->connections as $k=>$v){ // if($v->id==$close_id) // $v->send('reload_connection'); // } }; }; //进程启动后设置一个每秒运行一次的定时器 // $ws_worker->onWorkerStart = function($ws_worker) { // Timer::add(15, function()use($ws_worker){ // foreach ($ws_worker->connections as $k=>$v){ // $v->send('reload_connection'); // } // }); // }; // 运行worker Worker::runAll();