中国体彩网唯一官网
首頁 > 頭條 > 正文

【高級】workman 和swoole 有哪些區別和異同

轉載 2019-04-30 18:39:32 0 1716
贊助會員專享特權
workerman和swoole在現階段很紅,有時間得認識認識,不然你就不是混php圈子的。swoole是使用C語言實現的socket通信框架,workerman則是使用純php實現的socket框架,二者進程模型上也存在很多的不同。

先說下swoole的進程模型,看一下以下解析圖。

4faf02b321b8b0446e5021649790207.png

master進程
這個進程比較復雜,也是我認為最核心的進程,這是一個包含多線程的進程,分別是一個主線程和n個reactor線程(數量可以配置)。其中,主線程用于accept新的連接,然后評估一下每個reactor線程負責維護的連接數,然后分配給數量最少的那個reactor線程,最大程度保證每個reactor線程的負載量是均衡的。本質上講,一旦一個socket可讀或者可寫了,就由reactor線程發送給worker進程或者發送會客戶端。除此之外,主線程還負責對所有信號的接管,避免reactor線程收到信號的打擾中斷。說的洋氣點兒就是:master進程負責了連接的accept、托管、socket的可讀可寫(數據的發送和接受),本質上講,master進程負責了IO。還需要注意一點兒的是reactor線程是徹底的全異步非阻塞工作方式。

manager進程
manager進程是worker進程和taskworker進程的媽,說的洋氣點兒就是manager進程fork出來了worker進程和taskworker進程,生出來了就得管,所以,manager進程得負責對worker進程和taskworker進程的撫養義務,具體包括監控它們的狀態、當它們意外掛了后重新拉起一個新的進程(避免了僵尸進程)、平滑重啟(就是傳說中的reload)。

worker進程
worker進程是manager進程fork出來的,這個進程說白了就是搬磚干活(官方文檔中屢次提到的業務代碼),其實就是平時碼的那些curd業務邏輯代碼,懂了吧?只不過worker進程比較diao的是,這個進程可以用異步方式去工作,也可以用同步方式去工作。如果聽不懂什么意思,那就先背過,先混個臉熟再說。

taskworker進程
taskworker進程(后文中稱tasker進程)實際本質上也是worker進程,只不過是一種特殊的worker進程。如果你的worker進程中存在一些耗時耗力的操作,那么可以先拋給tasker進程,自己先去干別的,等tasker干完了,再由worker進程取回,非常diao。但是tasker進程只能工作在同步方式下,并不能使用異步。這就是為什么tasker進程不可以使用定時器,而worker進程可以使用定時器的原因。

簡單總結混在一起說下這幾種進程之間是怎么搭配起來干活的。簡單來說,就是master進程就是接活兒的銷售,但是具體干活則由worker進程來做,如果worker進程感覺到某些流程太繁忙復雜就可以讓tasker進程來做。而manager進程就是后勤worker進程和takser進程的人力資源保障部,負責他們的生死存亡和吃喝拉撒。

而workerman的進程模型相對就要簡單很多了,首先相對于swoole來說,workerman沒有swoole中的reator線程,其次workerman沒有用于處理普通業務的worker進程以及tasker進程。而workerman的話,socket是由worker進程負責的,swoole中則是由主進程中的reactor線程來負責的。而swoole在接受到數據后,可以通過自己的worker進程來處理業務(有點兒類似于fpm進程)。

workerman是一個高性能的PHP socket 服務器框架,workerman基于PHP多進程以及libevent事件輪詢庫,PHP開發者只要實現一兩個接口,便可以開發出自己的網絡應用,例如Rpc服務、聊天室服務器、手機游戲服務器等。

workerman的目標是讓PHP開發者更容易的開發出基于socket的高性能的應用服務,而不用去了解PHP socket以及PHP多進程細節。 workerman本身是一個PHP多進程服務器框架,具有PHP進程管理以及socket通信的模塊,所以不依賴php-fpm、nginx或者apache等這些容器便可以獨立運行

其中

workerman有兩種進程模型

1、基本的master worker模型

2、master gateway worker模型

master worker模型工作流程及進程間關系如下:

09a540d607a9c068305dbfa8c2f5057.png

master worker模型說明:

master進程為主進程,啟動過程中讀取conf配置,根據每個應用配置中的ip和端口創建監聽socket,然后再根據配置中的進程數創建對應數量的子進程即worker進程,worker進程會自動繼承master進程創建的監聽socket,使得worker進程能夠獨立的接受并處理客戶端的連接。而后master進程進入監聽信號的邏輯中,監聽worker進程退出信號(worker進程退出后,系統會自動向master進程發送一個SIGHCLD信號,mater進程會重新創建子進程,將缺失的子進程補上),master進程還會監聽workermand腳本發來的停止信號(SIGINT)和平滑重啟服務信號(SIGHUP)

worker進程為master進程派生出來的子進程,自動繼承了master進程的監聽socket,每個worker進程獨立的接受并處理客戶端的連接。

master worker模型比較適合業務簡單的應用或者短連接應用

master gateway worker模型工作流程和進程間關系如下:

e1d0b40f21575a282441d866ec4a832.png

master gateway worker 模型說明:

這種模型多了一個gateway進程組,工作流程與master worker模型基本相同,區別是worker進程不再直接與客戶端打交道,客戶端與worker進程之間多了一個gateway進程,gateway專職處理網絡IO,并維護客戶端的長連接。

master gateway worker 模型非常適合長連接應用

當我們業務代碼以同步阻塞方式來使用swoole和workerman的時候,swoole則很想nginx+fpm的二合一體,而workerman則只相當于nginx

php中文網最新課程二維碼
  • 相關標簽:workman swoole 區別和異同
  • 本文轉載于:csdn,如有侵犯,請聯系刪除
  • 相關文章


  • swoole創建UDP服務器的方法(代碼示例)
  • swoole創建tcp服務器的方法(代碼示例)
  • swoole創建web服務器的方法介紹(代碼示例)
  • swoole_process父子進程管道通信的代碼示例
  • 【高級】workman 和swoole 有哪些區別和異同
  • 網友評論

    文明上網理性發言,請遵守 新聞評論服務協議

    我要評論
    獨孤九賤(5)_ThinkPHP5視頻教程

    獨孤九賤(5)_ThinkPHP5視頻教程

    ThinkPHP是國內最流行的中文PHP開發框架,也是您Web項目的最佳選擇。《php.cn獨孤九賤(5)-ThinkPHP5視頻教程》課程以ThinkPHP5最新版本為例,從最基本的框架常識開始,將...

    獨孤九賤(4)_PHP視頻教程

    獨孤九賤(4)_PHP視頻教程

    江湖傳言:PHP是世界上最好的編程語言。真的是這樣嗎?這個梗究竟是從哪來的?學會本課程,你就會明白了。 PHP中文網出品的PHP入門系統教學視頻,完全從初學者的角度出發,絕不玩虛的,一切以實用、有用...

    獨孤九賤(1)_HTML5視頻教程

    獨孤九賤(1)_HTML5視頻教程

    《php.cn原創html5視頻教程》課程特色:php中文網原創幽默段子系列課程,以惡搞,段子為主題風格的php視頻教程!輕松的教學風格,簡短的教學模式,讓同學們在不知不覺中,學會了HTML知識。 ...

    ThinkPHP5實戰之[教學管理系統]

    ThinkPHP5實戰之[教學管理系統]

    本套教程,以一個真實的學校教學管理系統為案例,手把手教會您如何在一張白紙上,從零開始,一步一步的用ThinkPHP5框架快速開發出一個商業項目。

    PHP入門視頻教程之一周學會PHP

    PHP入門視頻教程之一周學會PHP

    所有計算機語言的學習都要從基礎開始,《PHP入門視頻教程之一周學會PHP》不僅是PHP的基礎部分更主要的是PHP語言的核心技術,是學習PHP必須掌握的內容,任何PHP項目的實現都離不開這部分的內容,通...

    作者信息

    藏色散人

    好好學習天天向上!

    最近文章
    css float屬性怎么用 232
    css flex-wrap屬性怎么用 881
    css flex-shrink屬性怎么用 301

    相關視頻教程

  • 千鋒教育PHP異步通信框架Swoole解讀視頻教程 千鋒教育PHP異步通信框架Swoole解讀視頻教程
  • ThinkPHP5基礎視頻教程 ThinkPHP5基礎視頻教程
  • PHP語法基礎與數據庫詳解教程 PHP語法基礎與數據庫詳解教程
  • PHP數據庫編程零基礎入門到精通 PHP數據庫編程零基礎入門到精通
  • PHP經典算法面試題 PHP經典算法面試題
  • 相關視頻章節

    中国体彩网唯一官网