workerman和swoole在现阶段很红,有时间得认识认识,不然你就不是混php圈子的。swoole是运用C语言实现的socket通讯框架,workerman则是运用纯php实现的socket框架,二者进程模型上也存在很多的不同。
先说下swoole的进程模型,看一下以下解析图。
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是一个高性能的PHPsocket服务器框架,workerman依据PHP多进程以及libevent事情轮询库,PHP开发者只需实现一两个接口,便能够开发出自己的网络运用,例如Rpc服务、聊天室服务器、手机游戏服务器等。
workerman的方针是让PHP开发者更简略的开发出依据socket的高性能的运用服务,而不用去了解PHPsocket以及PHP多进程细节。workerman自身是一个PHP多进程服务器框架,具有PHP进程管理以及socket通讯的模块,所以不依赖php-fpm、nginx或许apache等这些容器便能够独立运行
其中
workerman有两种进程模型
1、根本的masterworker模型
2、mastergatewayworker模型
masterworker模型作业流程及进程间联系如下:
masterworker模型阐明:
master进程为主进程,启动过程中读取conf装备,依据每个运用装备中的ip和端口创立监听socket,然后再依据装备中的进程数创立对应数量的子进程即worker进程,worker进程会主动继承master进程创立的监听socket,使得worker进程能够独立的承受并处理客户端的衔接。然后master进程进入监听信号的逻辑中,监听worker进程退出信号(worker进程退出后,系统会主意向master进程发送一个SIGHCLD信号,mater进程会从头创立子进程,将缺失的子进程补上),master进程还会监听workermand脚本发来的停止信号(SIGINT)和平滑重启服务信号(SIGHUP)
worker进程为master进程派生出来的子进程,主动继承了master进程的监听socket,每个worker进程独立的承受并处理客户端的衔接。
masterworker模型比较适合事务简略的运用或许短衔接运用
mastergatewayworker模型作业流程和进程间联系如下:
mastergatewayworker模型阐明:
这种模型多了一个gateway进程组,作业流程与masterworker模型根本相同,区别是worker进程不再直接与客户端打交道,客户端与worker进程之间多了一个gateway进程,gateway专职处理网络IO,并保护客户端的长衔接。
mastergatewayworker模型非常适合长衔接运用
当我们事务代码以同步堵塞方法来运用swoole和workerman的时分,swoole则很想nginx+fpm的二合一体,而workerman则只相当于nginx
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。