php使用swoole的应用场景有哪些?-PHP问题

资源魔 34 0

php应用swoole的使用场景有:一、及时搜集定位数据并及时输入,需求将一切的定位设施及时的接纳,将及时的轨迹记载显示正在舆图上;二、只搜集定位设施入库,需求把一切的定位设施上传的数据入库。

php应用swoole的使用场景有:

场景1 - 及时搜集定位数据及时输入(例 滴滴司机行驶轨迹)

阐明:

需求将一切的定位设施及时的接纳,将及时的轨迹记载显示正在舆图上

留意点:

第一点:

web1效劳器 衔接的用户1,2,3,web1播送信息时只能播送用户1,2,3,不克不及播送web2衔接的用户4,5,6,假定场景是谈天,用户1发送一音讯,只有web1 效劳器的用户能看到,web2的用户全副不克不及收到

第二点:音讯的频次管制,例:100个设施,100个用户, 100个设施每一秒上传一条数据,需求及时播送给每一个用户,就是每一秒要100*100 = 1W次,以是能够汇总每一秒数据播送给一切用户等等办法

2f08f5f6a61d57579d2158fbf7309f5.png

场景2 - 只搜集定位设施入库

阐明:需求把一切的定位设施上传的数据入库,设施7个,每一秒一条数据,集体应用swoole 的task 函数(送达一个异步的义务到 task_worker池中,此函数长短梗阻的, worker过程数一样能够设置装备摆设) 后挪用接口形式入库

效劳器内存报警成绩

缘由: 正在于swoole_server->task 函数

民间引见task底层应用Unix Socket管道通讯,是全内存的,不IO耗费。单过程读写功能可达100万/s,没有同的过程应用没有同的管道通讯,能够最年夜化行使多核。

但这义务假如是挪用顺序接口时,因为网络的提早,添加的义务年夜于生产的义务时,内存占用会一直的添加,招致效劳器的内存被占满。

处理办法:音讯针对入义务的频次管制,能够依据本人的营业场景界说这个工夫与能否可提早等状况,汇总1秒内的一切数据再挪用顺序接口(汇总时集体应用redis),最佳能间接入库,不用挪用接口

简略代码片断

function __construct($config) 
{
    $this->config = $config;
    $this->serv = new Swoole\Server($config['server']['host'], $config['server']['port']);
    // 衔接redis
    $this->redis = new Predis\Client($config['redis']);
    $this->storage = new Storage($this->config);
    $this->serv->set([
        'worker_num'      => $this->config['server']['workerNum'],   //工作过程数目
        'daemonize'       => $this->config['server']['daemonize'], //能否作为守护过程
        'task_worker_num' => $this->config['server']['taskWorkerNum'],
    ]);
    $this->serv->on('connect', function ($serv, $fd){
        $this->onConnect($fd, $serv);
    });
    
    $this->serv->on('receive', function ($serv, $fd, $from_id, $data)  {
        $this->onReceive($fd, $serv, $data);
    });
    $this->serv->on('Close', function($server, $fd) {
        $this->onClose($fd, $server);
        
    });
    $this->serv->on('Task', function($server, $task_id, $from_id, $data) {
        $this->onTask($server, $task_id, $from_id, $data);
        
    });
    $this->serv->on('Finish', function($server, $task_id, $data) {
        $this->onFinish($server, $task_id, $data);
        
    });
    $this->serv->start();
}
public function onTask($serv, $task_id, $from_id, $data){
    // insert 办法是经过接口入库
    $this->storage->insert($data);
}
public function onReceive($fd, $serv, $data)
{
    $this->storage->writeLog('message:'.$data);
    $data = $this->formatData($data, $fd);
    $serv->task($data);
}
public function onClose($fd, $serv) 
{
    // writeLog 办法是写入log
    $this->storage->writeLog('close fd:'.$fd);
}
public function onFinish($serv, $task_id, $data)
{
    return '';
}

相干学习保举:PHP编程从入门到通晓

以上就是php应用swoole的使用场景有哪些?的具体内容,更多请存眷资源魔其它相干文章!

标签: php Swoole php教程 php故障解决 php使用问题

抱歉,评论功能暂时关闭!