亚洲精品成人_精品成人一区_999视频在线播放_免费黄色在线_亚洲成人久久久_久久www免费视频

Swoole 的運(yùn)行模式


注: 以下內(nèi)容主要指 SwooleServer

Swoole 做了什么


Swoole 是 php 的一個(gè)擴(kuò)展,但是他又不是普通的擴(kuò)展,其最明顯的特點(diǎn)就是:一但運(yùn)行后就會(huì)接管PHP的控制權(quán),進(jìn)入事件循環(huán)。 當(dāng)某種IO事件發(fā)生時(shí), Swoole 會(huì)回調(diào)開(kāi)發(fā)者設(shè)置的指定PHP函數(shù)。

也就是說(shuō) SwooleServer 更像是一個(gè)用 C 語(yǔ)言封裝好的一個(gè) Tcp/Udp 支持 多線程EventLoop事件驅(qū)動(dòng)異步 等功能的框架。開(kāi)發(fā)者不需要關(guān)心底層的各種實(shí)現(xiàn),直接的在業(yè)務(wù)層面進(jìn)行開(kāi)發(fā)即可。

什么是IO事件


很多 php 程序員沒(méi)有使用過(guò)其他語(yǔ)言開(kāi)發(fā)Server,也不太了解除了php-fpm以外運(yùn)行模式的php程序,初次使用Swoole時(shí)總是會(huì)有各種摸不到頭腦的事情。其實(shí)IO我們經(jīng)常提起如: 磁盤(pán)IO網(wǎng)絡(luò)IO 在這里Swoole所指的IO事件實(shí)際上是指 網(wǎng)絡(luò)IO 事件。

在日常生活中你留下了一個(gè)郵箱,當(dāng)有人給你發(fā)送郵件的時(shí)候,你就會(huì)收到郵件提醒;而對(duì)于你而言,你并不關(guān)心郵件是如何送達(dá)的,你只關(guān)心你有沒(méi)有收到郵件,當(dāng)你收到郵件之后會(huì)根據(jù)郵件的內(nèi)容和發(fā)送人去做各種各樣的處理。在這個(gè)比喻中,Swoole就承擔(dān)了底層網(wǎng)絡(luò)事件的監(jiān)聽(tīng)及各種底層事件處理,當(dāng)收到郵件(請(qǐng)求)時(shí),會(huì)觸發(fā)收件(接收)提醒,然后將控制權(quán)轉(zhuǎn)交給你(預(yù)先注冊(cè)的事件回調(diào)函數(shù)),來(lái)進(jìn)行后續(xù)的處理。

Swoole 的運(yùn)行流程


初始化
<?php

// new 一個(gè)SwoolerServer對(duì)象 并指定監(jiān)聽(tīng)端口 和運(yùn)行模式 以及Socket類(lèi)型
// 此時(shí)的一切一切 都是開(kāi)發(fā)者進(jìn)行配置的時(shí)間,沒(méi)有任何其他事情發(fā)生
$server = new Swoole\Server('0.0.0.0', 9501, SWOOLE_PROCESS, SWOOLE_SOCK_TCP);

// 設(shè)置運(yùn)行參數(shù), 就像你平時(shí)做的那樣,給$server 對(duì)象配置相關(guān)的參數(shù)
$server->set([
    'worker_num' => 4,    // 工作進(jìn)程數(shù)量
    'daemonize' => true,  // 是否以守護(hù)進(jìn)程模式運(yùn)行
    'backlog' => 128,     // Listen隊(duì)列長(zhǎng)度
]);

// 注冊(cè)事件回調(diào)函數(shù)
// 這里指 當(dāng)?shù)讓覶cp新連接進(jìn)入事件時(shí) 交給Tcp 類(lèi)的 onConnect 靜態(tài)方法處理
$server->on('Connect', [Tcp::class, 'onConnect']);
// 這里指 當(dāng)收到數(shù)據(jù)時(shí) 交給Tcp 類(lèi)的 onReceive 靜態(tài)方法處理
$server->on('Receive', [Tcp::class, 'onReceive']);
// 這里指 當(dāng)Tcp客戶(hù)端連接關(guān)閉時(shí) 交給Tcp 類(lèi)的 onClose 靜態(tài)方法處理
$server->on('Close', [Tcp::class, 'onClose']);

在上面的示例當(dāng)中,實(shí)際上Swoole還尚未啟動(dòng),但是我們已經(jīng)預(yù)先配置了許多必要的配置條件。鑒于有的新人還尚不了解什么叫做 回調(diào)函數(shù),在這里我簡(jiǎn)單的講解一下:

所謂的回調(diào)函數(shù)(CallBack) 就好比是張開(kāi)了夾子的捕鼠器,我們?cè)O(shè)定當(dāng)有老鼠踩到捕鼠器的時(shí)候,他會(huì)關(guān)閉夾子然后捉住老鼠,我們放置捕鼠器的時(shí)候,捕鼠器并沒(méi)有真的抓老鼠。這個(gè)設(shè)定就是回調(diào),他不立刻執(zhí)行,會(huì)在遇到觸發(fā)條件(事件)時(shí)執(zhí)行,在上面的示例當(dāng)中我們放置了3個(gè)捕鼠器(回調(diào)函數(shù)),我們只需要知道他會(huì)在特定老鼠(事件)踩到的時(shí)候(發(fā)生的時(shí)候)去執(zhí)行我們期望的功能就好。

Server Start
// 啟動(dòng)Swole Server 將由 Swoole 接管php運(yùn)行
$server->start();

至此Swoole 完全的接管了php的運(yùn)行,并且監(jiān)聽(tīng)相應(yīng)端口并當(dāng)發(fā)生事件時(shí)去執(zhí)行開(kāi)發(fā)者自定義的事件回調(diào)。

僅僅如此嗎?

事實(shí)上Swoole 在啟動(dòng)的時(shí)候做了非常多的事情:

Swoole 運(yùn)行流程圖: Swoole運(yùn)行流程圖

Swoole 進(jìn)程關(guān)系圖: Swoole進(jìn)程關(guān)系圖

上圖中我們可以了解,Swoole 會(huì)創(chuàng)建一個(gè) Manager 進(jìn)程專(zhuān)門(mén) 管理 WorkTask 進(jìn)程。 而 Work 進(jìn)程則直接通過(guò) Unix SocketMaster 進(jìn)程通訊。

待續(xù)

主站蜘蛛池模板: wwwxx在线观看| 亚洲日本va中文字幕 | 九九热国产在线 | 日韩和的一区二在线 | 国产1区在线 | 国产亚洲视频在线观看 | 欧美日性 | 亚洲国产www | 精品噜噜噜噜久久久久久久久试看 | 日本高清视频色 | 日本a网| 亚洲二区在线播放视频 | 成人毛片在线观看 | 97在线影院 | 三级网址在线播放 | 午夜视频福利在线观看 | 亚洲综合一区二区三区 | 亚洲蜜桃视频 | 91av视频在线 | 欧美激情一区二区三级高清视频 | 美女毛片免费看 | 日本在线一区 | 一级一级特黄女人精品毛片 | 亚洲自拍偷拍一区二区 | 一级毛片全部免费播放特黄 | 亚洲视频中文字幕在线观看 | 久久久久久久福利 | 国产一级一级毛片 | 精品一区二区三区免费观看 | www.香蕉网| 国产孕妇孕交大片孕 | 91精品久久久久久久久入口 | 国产精品日日摸天天碰 | 人人插人人干 | 亚洲 欧美 中文字幕 | 91插插插com 91插插插插插插插 91插插插插插插插插 | 99热视 | 狠狠色丁香婷婷久久 | 精品视频一二三区 | 中国黄色一级大片 | 一级观看免费完整版视频 |