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次,以是能够汇总每一秒数据播送给一切用户等等办法
场景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使用问题
抱歉,评论功能暂时关闭!