真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

swoole在php中的用場景

這篇文章將為大家詳細講解有關swoole在php中的用場景,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

10余年的長壽網(wǎng)站建設經(jīng)驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。網(wǎng)絡營銷推廣的優(yōu)勢是能夠根據(jù)用戶設備顯示端的尺寸不同,自動調(diào)整長壽建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。成都創(chuàng)新互聯(lián)從事“長壽網(wǎng)站設計”,“長壽網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。

概述:

Swoole是一個面向生產(chǎn)環(huán)境的 PHP 異步網(wǎng)絡通信引擎,使 PHP 開發(fā)人員可以編寫高性能的異步并發(fā) TCP、UDP、Unix Socket、HTTP,WebSocket 服務。Swoole 可以廣泛應用于互聯(lián)網(wǎng)、移動通信、企業(yè)軟件、云計算、網(wǎng)絡游戲、物聯(lián)網(wǎng)(IOT)、車聯(lián)網(wǎng)、智能家居等領域。 使用 PHP + Swoole 作為網(wǎng)絡通信框架,可以使企業(yè) IT 研發(fā)團隊的效率大大提升。

php使用swoole的應用場景有:

場景1 - 實時收集定位數(shù)據(jù)實時輸出(例 滴滴司機行駛軌跡)

說明:

需要將所有的定位設備實時的接收,將實時的軌跡記錄顯示在地圖上

注意點:

第一點:

web1服務器 連接的用戶1,2,3,web1廣播信息時只能廣播用戶1,2,3,不能廣播web2連接的用戶4,5,6,假設場景是聊天,用戶1發(fā)送一消息,只有web1 服務器的用戶能看到,web2的用戶全部不能收到

第二點:消息的頻率控制,例:100個設備,100個用戶, 100個設備每秒上傳一條數(shù)據(jù),需要實時廣播給每個用戶,就是每秒要100*100 = 1W次,所以可以匯總每秒數(shù)據(jù)廣播給所有用戶等等方法

swoole在php中的用場景

場景2 - 只收集定位設備入庫

說明:需要把所有的定位設備上傳的數(shù)據(jù)入庫,設備7個,每秒一條數(shù)據(jù),個人使用swoole 的task 函數(shù)(投遞一個異步的任務到 task_worker池中,此函數(shù)是非阻塞的, worker進程數(shù)同樣可以配置) 后調(diào)用接口方式入庫

服務器內(nèi)存報警問題

原因: 在于swoole_server->task 函數(shù)

官方介紹task底層使用Unix Socket管道通信,是全內(nèi)存的,沒有IO消耗。單進程讀寫性能可達100萬/s,不同的進程使用不同的管道通信,可以最大化利用多核。

但這任務如果是調(diào)用程序接口時,由于網(wǎng)絡的延遲,增加的任務大于消費的任務時,內(nèi)存占用會不斷的增加,導致服務器的內(nèi)存被占滿。

解決方法:消息針對入任務的頻率控制,可以根據(jù)自己的業(yè)務場景定義這個時間與是否可延遲等情況,匯總1秒內(nèi)的所有數(shù)據(jù)再調(diào)用程序接口(匯總時個人使用redis),最好能直接入庫,不必調(diào)用接口

簡單代碼片段

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'],   //工作進程數(shù)量
        '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 '';
}

關于swoole在php中的用場景就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。


當前名稱:swoole在php中的用場景
分享地址:http://weahome.cn/article/pijhdh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部