Start.php 3.23 KB
<?php

//本机IP是10.211.55.13
//需要监听的端口是 9090
use Workerman\Connection\AsyncTcpConnection;
use Workerman\Worker;
use Workerman\Lib\Timer;
require 'workerman/Autoloader.php';
define('HEARTBEAT_TIME', 30);
//require 'workerman/Autoloader.php';
// 创建一个Worker监听9090端口,使用websocket协议通讯
$clients = []; //保存客户端信息
$ws_worker = new Worker("websocket://0.0.0.0:2345");
//$ws_worker = new Worker("websocket://172.20.0.131:9090");
// 启动4个进程对外提供服务
$ws_worker->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();