CN112612428A - 一种提升Codeigniter框架性能的方法及装置 - Google Patents
一种提升Codeigniter框架性能的方法及装置 Download PDFInfo
- Publication number
- CN112612428A CN112612428A CN202011640486.7A CN202011640486A CN112612428A CN 112612428 A CN112612428 A CN 112612428A CN 202011640486 A CN202011640486 A CN 202011640486A CN 112612428 A CN112612428 A CN 112612428A
- Authority
- CN
- China
- Prior art keywords
- codeigniter
- frame
- request
- framework
- reactor
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0674—Disk device
- G06F3/0676—Magnetic disk device
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
- G06F9/449—Object-oriented method invocation or resolution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4494—Execution paradigms, e.g. implementations of programming paradigms data driven
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
- G06F9/4881—Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- General Factory Administration (AREA)
Abstract
本发明公开了一种提升Codeigniter框架性能的方法及装置,该方法包括:步骤S1,调整Codeigniter框架代码,拆分框架入口及核心文件,并调整其中与Swoole不兼容的代码;步骤S2,创建一个Server,产生包含Reactor线程的Master、Worker、Task及Manager进程,并开启一键协程化;步骤S3,在Server接收到业务请求后,由Master基于事件驱动转发给Worker;步骤S4,Worker调用Codeigniter框架处理Master的Reactor线程投递的业务请求,将响应数据发给Reactor;步骤S5,Reactor将得到的响应数据发送给客户端。
Description
技术领域
本发明涉及Web应用开发技术领域,特别是涉及一种基于Swoole提升Codeigniter框架性能的方法及装置。
背景技术
目前,以PHP(Hypertext Preprocessor,超级文本预处理语言)做为开发语言的Web应用,多数采用Apache(服务器软件)或Nginx(HTTP和反向代理web服务器)通过SAPI(Server Application Programming Interface,服务器应用程序编程接口)和PHP交换数据以对外提供HTTP服务。常见SAPI的部署方式有APACHE2HANDLER模式(Apache下preforkMPM),CGI/FastCGI模式(Apache下worker MPM、event MPM和Nginx)。无论哪种模式,最终的请求处理都是由PHP完成的。
虽然FastCGI模式下并发性能有所提升,但其处理能力仍取决CGI进程的数量;进程过多时的调度、PHP程序执行时的网络或磁盘IO阻塞导致CPU上下文频繁切换,以及机器本身的性能限制使其很容易出现性能瓶颈。而在互联网时代,高并发访问请求下,性能问题会被放大,亦可能产生雪崩效应,导致系统响应慢,甚至不可用,就会大大降低互联网产品的用户体验度。
另一方面,Codeigniter是一个小巧但功能强大的PHP框架,作为一个简单而“优雅”的工具包,它可以为开发者们建立功能完善的Web应用程序;但其同样也存在上述的性能问题外,来自用户的每次请求都会重新从磁盘加载整个脚本产生额外的磁盘IO,进一步影响性能。
发明内容
为克服上述现有技术存在的不足,本发明之目的在于提供一种提升Codeigniter框架性能的方法及装置,以解决现有技术中基于PHP Codeigniter框架开发的Web应用程序中存在的性能问题。
为达上述目的,本发明提出一种提升Codeigniter框架性能的方法,包括如下步骤:
步骤S1,调整Codeigniter框架代码,拆分Codeigniter框架入口及核心文件,并调整其中与Swoole不兼容的代码,以供Swoole调用;
步骤S2,创建一个Server,产生包含Reactor线程的Master进程、Worker进程、Task进程、Manager进程,并开启协程化支持;
步骤S3,在所述Server接收到业务请求后,由Master进程基于事件驱动转发给Worker进程;
步骤S4,Worker进程调用Codeigniter框架处理所述Master进程的Reactor线程投递的业务请求,并将响应数据发给Reactor线程;
步骤S5,所述Reactor线程将得到的响应数据发送给客户端。
优选地,步骤S1包括:
步骤S100,将所述Codeigniter框架入口index.php中进行框架资源相关和环境常量的初始化代码提取为Codeigniter_config.php;
步骤S101,将所述Codeigniter框架的核心文件Codeigniter.php中框架本身资源的加载和初始化提取为Codeigniter_init.php;
步骤S102,将所述Codeigniter框架的核心文件Codeigniter.php中处理业务请求数据相关的代码提取为Codeigniter_execute.php;
步骤S103,对所述Codeigniter框架中不兼容Swoole的代码进行修改调整,并将修改调整后的代码按照类别放置到Codeigniter_init.php和Codeigniter_execute.php中。
优选地,于步骤S103中,对Codeigniter框架中不兼容Swoole的代码进行修改调整包括exit/die、对异常抛出进行try/catch以及使用Co::sleep()替换原生sleep,并将调整后的代码按照类别放置到Codeigniter_init.php和Codeigniter_execute.php中。
优选地,步骤S2包括:
步骤S200,新建Swoole入口;
步骤S201,在新入口中创建swoole_http_server,并设定Worker进程的数量worker_num以及设定最大请求次数max_request等运行参数;
步骤S202,开启协程化支持,让同步IO的代码变成可以协程调度的异步IO;
步骤S203,设定Worker进程启动启动回调方法onWorkerStart,加载在步骤S100、步骤S101中调整过的框架配置和初始化部分代码;
步骤S204,设定request回调方法onRequest,加载框架业务处理部分代码;
步骤S205,调用start启动按照前述步骤配置运行的服务器Server,创建Master进程以及Manager进程,Manager进程会依据前述步骤中的配置创建和回收Worker/Task进程。
优选地,于步骤S205中,执行php Serve.php命令以调用start启动服务器。
优选地,步骤S3进一步包括:
步骤S300,Master进程默认启动CPU核数相同数量的Reactor线程;
步骤S301,由Reactor线程负责维护客户端TCP连接、处理网络IO、处理协议,将客户端发来的请求数据缓冲、拼接、拆分成完整的一个请求数据包;
步骤S302,Reactor线程将完整的请求数据包投递给Worker进程。
优选地,每个Reactor线程维持一个EventLoop。
优选地,步骤S4进一步包括:
步骤S400,Worker进程接收由Reactor线程投递的请求数据包;
步骤S401,Worker进程执行设定的PHP Request回调函数,所述PHP Request回调函数中调用Codeigniter处理请求;
步骤S402,对Codeigniter框架路由、输入重新初始化,以处理数据请求,执行相应业务逻辑代码;
步骤S403,Codeigniter框架执行业务逻辑代码返回业务数据处理结果给Request回调函数;
步骤S404,Request回调函数调用end方法将生成响应数据发给Reactor线程。
优选地,步骤S5进一步包括:
步骤S500,Reactor线程接收到Worker进程返回的数据;
步骤S501,Reactor将响应数据发送给客户端;
步骤S502,Reactor进行下一轮事件循环。
为达到上述目的,本发明还提供一种提升Codeigniter框架性能的装置,包括:
Codeigniter框架代码调整模块,用于调整Codeigniter框架代码,拆分Codeigniter框架入口及核心文件,并调整其中与Swoole不兼容的代码,以供Swoole调用;
Server及各进程创建模块,用于创建一个Server,产生包含Reactor线程的Master进程、Worker进程、Task进程、Manager进程,并开启协程化支持;
Master进程,用于在Server接收到业务请求后,基于事件驱动转发给Worker进程,并由Reactor线程接收Worker进程返回的响应数据,将响应数据发送给客户端;
Worker进程,用于调用Codeigniter框架处理Reactor线程投递的业务请求,并将响应数据发给Reactor线程。
与现有技术相比,本发明一种提升Codeigniter框架性能的方法及装置通过利用Swoole的事件驱动、非阻塞特性,并调整Codeigniter框架代码,常驻内存减少不必要的磁盘IO以及充分利用协程化使同步IO变异步IO,加快了业务数据处理速度;对比传统PHP-FPM(FastCGI),在业务逻辑处理这一层也变成事件驱动,彻底消除浪费线程等待IO这个现象,大幅度提升了并发性能。
附图说明
图1为本发明一种提升Codeigniter框架性能的方法的步骤流程图;
图2为本发明具体实施例中提升Codeigniter框架性能的流程图;
图3为本发明一种提升Codeigniter框架性能的装置的系统架构图。
具体实施方式
以下通过特定的具体实例并结合附图说明本发明的实施方式,本领域技术人员可由本说明书所揭示的内容轻易地了解本发明的其它优点与功效。本发明亦可通过其它不同的具体实例加以施行或应用,本说明书中的各项细节亦可基于不同观点与应用,在不背离本发明的精神下进行各种修饰与变更。
图1为本发明一种提升Codeigniter框架性能的方法的步骤流程图,图2为本发明具体实施例中提升Codeigniter框架性能的流程图。如图1及图2所示,本发明一种提升Codeigniter框架性能的方法,包括如下步骤:
步骤S1,调整Codeigniter框架代码,拆分Codeigniter框架入口及核心文件,并调整其中与Swoole不兼容的代码,以供Swoole调用。
在本发明具体实施例中,所使用的Swoole是一个面向生产环境的PHP异步网络通信引擎,使PHP开发人员可以编写高性能的异步并发TCP、UDP、Unix Socket、HTTP,WebSocket服务。
具体地,步骤S1进一步包括:
步骤S100,将Codeigniter框架入口index.php中进行框架资源相关和环境常量的初始化代码提取为Codeigniter_config.php。
开源的Codeigniter框架统一入口是index.php,每次请求都会加载整个框架文件,严重浪费资源,因此,首先将index.php中进行框架资源相关和环境常量的初始化代码提取为Codeigniter_config.php;
步骤S101,将Codeigniter框架的核心文件Codeigniter.php中框架本身资源的加载和初始化提取为Codeigniter_init.php;
步骤S102,将Codeigniter框架的核心文件Codeigniter.php中处理业务请求数据相关的代码提取为Codeigniter_execute.php。
步骤S103,对Codeigniter框架中不兼容Swoole的代码进行修改调整,特别是exit/die,将修改调整后的代码按照类别放置到Codeigniter_init.php和Codeigniter_execute.php中,做到对框架无侵入式修改,便于开发后期框架版本的升级。
步骤S2,创建一个Server,产生Master进程(包含Reactor线程)、Worker进程、Task进程、Manager进程,并开启协程化支持。
具体地,步骤S2进一步包括:
步骤S200,新建Swoole入口,名为serve.php。
步骤S201,在新入口中创建swoole_http_server,设定Worker进程的数量worker_num以及设定最大请求次数max_request等运行参数。
步骤S202,开启协程化支持,让同步IO的代码变成可以协程调度的异步IO,在本发明具体实施例中,开启协程化支持示例为:
Co::set(['hook_flags'=>SWOOLE_HOOK_ALL])。
步骤S203,设定Worker进程启动回调方法(onWorkerStart),加载在步骤S100、步骤S101中调整过的框架配置和初始化部分代码,这部分代码(框架本身)只在启动时加载并运行,常驻内存。
步骤S204,设定request回调方法(onRequest),加载框架业务处理部分代码。这部分和具体业务处理相关,由开发应用人员编写;执行时,路由、input等涉及业务数据的模块需要重新实例化,以便正确执行业务逻辑处理的代码。
步骤S205,调用start启动按照前述步骤配置运行的服务器Server(执行phpServe.php命令),创建Master进程以及Manager进程,Manager进程会依据前述步骤中的配置创建和回收Worker/Task进程。
步骤S3,Server接收到业务请求后,由Master进程基于事件驱动(核心是EventLoop)转发给Worker进程。
具体地,步骤S3进一步包括:
步骤S300,Master进程默认启动CPU核数相同的数量的Reactor线程,每个Reactor线程都会维持一个EventLoop。本发明中,Reactor线程之间是无锁的,指令可以被CPU全部核并行执行。
步骤S301,由Reactor线程负责维护客户端TCP连接、处理网络IO、处理协议,将客户端发来的请求数据缓冲、拼接、拆分成完整的一个请求数据包。
步骤S302,Reactor线程将完整的请求数据包投递给Worker进程。
步骤S4,Worker进程调用Codeigniter框架处理Reactor线程投递的业务请求,并将响应数据发给Reactor线程。
具体地,步骤S4进一步包括:
步骤S400,Worker进程接收由Reactor线程投递的请求数据包。
步骤S401,Worker进程执行设定的PHP Request回调函数,所述PHP Request回调函数中调用Codeigniter处理请求。
步骤S402,对Codeigniter框架路由(Router)、输入(Input)需要重新初始化,以处理数据请求,执行相应业务逻辑代码。
步骤S403,Codeigniter框架执行业务逻辑代码返回业务数据处理结果给Request回调函数。
步骤S405,Request回调函数调用end方法将生成响应数据发给Reactor线程。
步骤S5,由Reactor线程将得到的响应数据发送给客户端
具体地,步骤S5进一步包括:
步骤S500,Reactor线程接收到Worker进程返回的数据
步骤S501,Reactor将响应数据发送给客户端;
步骤S502,Reactor进行下一轮事件循环。
图3为本发明一种提升Codeigniter框架性能的装置的系统架构图。如图3所示,本发明一种提升Codeigniter框架性能的装置,包括:
Codeigniter框架代码调整模块30,用于调整Codeigniter框架代码,拆分Codeigniter框架入口及核心文件,并调整其中与Swoole不兼容的代码,以供Swoole调用。
在本发明具体实施例中,所使用的Swoole是一个面向生产环境的PHP异步网络通信引擎,使PHP开发人员可以编写高性能的异步并发TCP、UDP、Unix Socket、HTTP,WebSocket服务。
具体地,Codeigniter框架代码调整模块30进一步包括:
框架入口提取单元301,用于将Codeigniter框架入口index.php中进行框架资源相关和环境常量的初始化代码提取为Codeigniter_config.php。
开源的Codeigniter框架统一入口是index.php,每次请求都会加载整个框架文件,严重浪费资源,因此,入口拆分单元301首先将index.php中进行框架资源相关和环境常量的初始化代码提取为Codeigniter_config.php;
核心文件提取单元302,用于将Codeigniter框架的核心文件Codeigniter.php中框架本身资源的加载和初始化提取为Codeigniter_init.php,以及将Codeigniter框架的核心文件Codeigniter.php中处理业务请求数据相关的代码提取为Codeigniter_execute.php。
不兼容代码处理单元303,用于将Codeigniter框架中不兼容Swoole的代码进行修改调整处理,特别是exit/die,将修改调整后的代码按照类别放置到Codeigniter_init.php和Codeigniter_execute.php中,做到对框架无侵入式修改,便于开发后期框架版本的升级。
Server及各进程创建模块31,用于创建一个Server,产生Master进程(包含Reactor线程)、Worker进程、Task进程、Manager进程,并开启协程化支持。
具体地,Server及各进程创建模块31进一步包括:
Swoole入口创建单元310,用于新建Swoole入口,名为serve.php。
运行参数设置单元311,用于在新入口中创建swoole_http_server,设定Worker进程的数量worker_num以及设定最大请求次数max_request等运行参数,并设定Worker进程启动时加载调整后的框架配置和初始化部分代码,这部分代码(框架本身)只在启动时加载并运行,常驻内存。
协程支持开启单元312,用于开启协程化支持,让同步IO的代码变成可以协程调度的异步IO,在本发明具体实施例中,开启协程化支持示例为:
Co::set(['hook_flags'=>SWOOLE_HOOK_ALL])。
事件回调设置单元313,用于设定Worker进程启动回调方法(onWorkerStart),加载在框架入口提取单元301、核心文件提取单元302中调整过的框架配置和初始化部分代码,这部分代码(框架本身)只在启动时加载并运行,常驻内存;设定request回调方法(onRequest),加载框架业务处理部分代码。这部分和具体业务处理相关,由开发应用人员编写;执行时,路由、input等涉及业务数据的模块需要重新实例化,以便正确执行业务逻辑处理的代码。
进程创建单元314,用于调用start启动按照前述过程配置运行的服务器Server(执行php Serve.php命令),创建Master进程以及Manager进程,Manager进程会依据前述过程中的配置创建和回收Worker/Task进程。
Master进程32,用于在Server接收到业务请求后,由Master进程基于事件驱动(核心是EventLoop)转发给Worker进程,并由Reactor线程接收Worker进程返回的响应数据,将响应数据发送给客户端。
Master进程32具体用于:
Master进程默认启动CPU核数相同的数量的Reactor线程,每个Reactor线程都会维持一个EventLoop。本发明中,Reactor线程之间是无锁的,指令可以被CPU全部核并行执行。
利用Reactor线程负责维护客户端TCP连接、处理网络IO、处理协议,将客户端发来的请求数据缓冲、拼接、拆分成完整的一个请求数据包。
利用Reactor线程将完整的请求数据包投递给Worker进程;
当Reactor线程接收到Worker进程返回的相应数据时,Reactor线程将响应数据发送给客户端;
Reactor线程进行下一轮事件循环。
Worker进程33,用于调用Codeigniter框架处理Reactor线程投递的业务请求,并将响应数据发给Reactor线程。
Worker进程33具体用于:
Worker进程接收由Reactor线程投递的请求数据包;
Worker进程执行设定的PHP Request回调函数,所述PHP Request回调函数中调用Codeigniter处理请求;
对Codeigniter框架路由(Router)、输入(Input)重新初始化,以处理数据请求,执行相应业务逻辑代码;
Codeigniter框架执行业务逻辑代码返回业务数据处理结果给Request回调函数;
Request回调函数调用end方法将生成响应数据发给Reactor线程。
综上所述,本发明一种提升Codeigniter框架性能的方法及装置通过利用Swoole的事件驱动、非阻塞特性,并调整Codeigniter框架代码,常驻内存减少不必要的磁盘IO以及充分利用协程化使同步IO变异步IO,加快了业务数据处理速度,并大幅度提升了并发性能。
上述实施例仅例示性说明本发明的原理及其功效,而非用于限制本发明。任何本领域技术人员均可在不违背本发明的精神及范畴下,对上述实施例进行修饰与改变。因此,本发明的权利保护范围,应如权利要求书所列。
Claims (10)
1.一种提升Codeigniter框架性能的方法,包括如下步骤:
步骤S1,调整Codeigniter框架代码,拆分Codeigniter框架入口及核心文件,并调整其中与Swoole不兼容的代码,以供Swoole调用;
步骤S2,创建一个Server,产生包含Reactor线程的Master进程、Worker进程、Task进程、Manager进程,并开启协程化支持;
步骤S3,在所述Server接收到业务请求后,由Master进程基于事件驱动转发给Worker进程;
步骤S4,Worker进程调用Codeigniter框架处理所述Master进程的Reactor线程投递的业务请求,并将响应数据发给Reactor线程;
步骤S5,所述Reactor线程将得到的响应数据发送给客户端。
2.如权利要求1所述的一种提升Codeigniter框架性能的方法,其特征在于,步骤S1包括:
步骤S100,将所述Codeigniter框架入口index.php中进行框架资源相关和环境常量的初始化代码提取为Codeigniter_config.php;
步骤S101,将所述Codeigniter框架的核心文件Codeigniter.php中框架本身资源的加载和初始化提取为Codeigniter_init.php;
步骤S102,将所述Codeigniter框架的核心文件Codeigniter.php中处理业务请求数据相关的代码提取为Codeigniter_execute.php;
步骤S103,对所述Codeigniter框架中不兼容Swoole的代码进行修改调整,并将修改调整后的代码按照类别放置到Codeigniter_init.php和Codeigniter_execute.php中。
3.如权利要求2所述的一种提升Codeigniter框架性能的方法,其特征在于:于步骤S103中,对Codeigniter框架中不兼容Swoole的代码重进行修改调整,包括exit/die、对异常抛出进行try/catch以及使用Co::sleep()替换原生sleep,并将调整后的代码按照类别放置到Codeigniter_init.php和Codeigniter_execute.php中。
4.如权利要求2所述的一种提升Codeigniter框架性能的方法,其特征在于,步骤S2包括:
步骤S200,新建Swoole入口;
步骤S201,在新入口中创建swoole_http_server,并设定Worker进程的数量worker_num以及设定最大请求次数max_request等运行参数;
步骤S202,开启协程化支持,让同步IO的代码变成可以协程调度的异步IO;
步骤S203,设定Worker进程启动回调方法onWorkerStart,加载在步骤S100、步骤S101中调整过的框架配置和初始化部分代码;
步骤S204,设定request回调方法onRequest,加载框架业务处理部分代码;
步骤S205,调用start启动按照前述步骤配置运行的服务器Server,创建Master进程以及Manager进程,由Manager进程依据前述步骤中的配置创建和回收Worker/Task进程。
5.如权利要求4所述的一种提升Codeigniter框架性能的方法,其特征在于:于步骤S205中,执行php Serve.php命令以调用start启动服务器。
6.如权利要求4所述的一种提升Codeigniter框架性能的方法,其特征在于,步骤S3进一步包括:
步骤S300,Master进程默认启动CPU核数相同数量的Reactor线程;
步骤S301,由Reactor线程负责维护客户端TCP连接、处理网络IO、处理协议,将客户端发来的请求数据缓冲、拼接、拆分成完整的一个请求数据包;
步骤S302,Reactor线程将完整的请求数据包投递给Worker进程。
7.如权利要求6所述的一种提升Codeigniter框架性能的方法,其特征在于:每个Reactor线程维持一个EventLoop。
8.如权利要求7所述的一种提升Codeigniter框架性能的方法,其特征在于,步骤S4进一步包括:
步骤S400,Worker进程接收由Reactor线程投递的请求数据包;
步骤S401,Worker进程执行设定的PHP Request回调函数,所述PHP Request回调函数中调用Codeigniter处理请求;
步骤S402,对Codeigniter框架路由、输入重新初始化,以处理数据请求,执行相应业务逻辑代码;
步骤S403,Codeigniter框架执行业务逻辑代码返回业务数据处理结果给Request回调函数;
步骤S404,Request回调函数调用end方法将生成响应数据发给Reactor线程。
9.如权利要求8所述的一种提升Codeigniter框架性能的方法,其特征在于,步骤S5进一步包括:
步骤S500,Reactor线程接收到Worker进程返回的数据;
步骤S501,Reactor将响应数据发送给客户端;
步骤S502,Reactor进行下一轮事件循环。
10.一种提升Codeigniter框架性能的装置,包括:
Codeigniter框架代码调整模块,用于调整Codeigniter框架代码,拆分Codeigniter框架入口及核心文件,并调整其中与Swoole不兼容的代码,以供Swoole调用;
Server及各进程创建模块,用于创建一个Server,产生包含Reactor线程的Master进程、Worker进程、Task进程、Manager进程,并开启协程化支持;
Master进程,用于在Server接收到业务请求后,基于事件驱动转发给Worker进程,并由Reactor线程接收Worker进程返回的响应数据,将响应数据发送给客户端;
Worker进程,用于调用Codeigniter框架处理Reactor线程投递的业务请求,并将响应数据发给Reactor线程。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011640486.7A CN112612428B (zh) | 2020-12-31 | 2020-12-31 | 一种提升Codeigniter框架性能的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011640486.7A CN112612428B (zh) | 2020-12-31 | 2020-12-31 | 一种提升Codeigniter框架性能的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112612428A true CN112612428A (zh) | 2021-04-06 |
CN112612428B CN112612428B (zh) | 2022-06-28 |
Family
ID=75253202
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011640486.7A Active CN112612428B (zh) | 2020-12-31 | 2020-12-31 | 一种提升Codeigniter框架性能的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112612428B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113596148A (zh) * | 2021-07-27 | 2021-11-02 | 上海商汤科技开发有限公司 | 一种数据传输方法、系统、装置、计算设备和存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050097538A1 (en) * | 2003-10-30 | 2005-05-05 | Laura Joseph G. | Implementation of distributed and asynchronous processing in COBOL |
CN106230984A (zh) * | 2016-09-12 | 2016-12-14 | 深圳市彬讯科技有限公司 | 一种采用Netty框架实现网页服务通道的方法 |
CN110795254A (zh) * | 2019-09-23 | 2020-02-14 | 武汉智美互联科技有限公司 | 一种基于php处理高并发io的方法 |
CN111131499A (zh) * | 2019-12-31 | 2020-05-08 | 北京讯鸟软件有限公司 | 并发和异步任务处理方法及其设备 |
-
2020
- 2020-12-31 CN CN202011640486.7A patent/CN112612428B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050097538A1 (en) * | 2003-10-30 | 2005-05-05 | Laura Joseph G. | Implementation of distributed and asynchronous processing in COBOL |
CN106230984A (zh) * | 2016-09-12 | 2016-12-14 | 深圳市彬讯科技有限公司 | 一种采用Netty框架实现网页服务通道的方法 |
CN110795254A (zh) * | 2019-09-23 | 2020-02-14 | 武汉智美互联科技有限公司 | 一种基于php处理高并发io的方法 |
CN111131499A (zh) * | 2019-12-31 | 2020-05-08 | 北京讯鸟软件有限公司 | 并发和异步任务处理方法及其设备 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113596148A (zh) * | 2021-07-27 | 2021-11-02 | 上海商汤科技开发有限公司 | 一种数据传输方法、系统、装置、计算设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112612428B (zh) | 2022-06-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9501319B2 (en) | Method and apparatus for scheduling blocking tasks | |
Schmidt | Applying patterns and frameworks to develop object-oriented communication software | |
US7788668B2 (en) | System and method for implementing distributed priority inheritance | |
EP3913859A1 (en) | Vnf life cycle management method and apparatus | |
US7536688B2 (en) | Segmented virtual machine | |
JPH1083308A (ja) | スタブ検索及びローディング・サブシステム、スタブ検索及びローディング方法並びにスタブ検索及びローディング用記録媒体 | |
JPH07281974A (ja) | ネットワーク内のコンピュータ間でデータを交換するための通信システム | |
US7900212B2 (en) | Pooling stateful session Enterprise Java Beans for reuse | |
WO2015100646A1 (zh) | 软件架构的实现方法和实现平台 | |
CN112688915A (zh) | 跨协议通信方法、装置及服务器 | |
CN112612428B (zh) | 一种提升Codeigniter框架性能的方法及装置 | |
CN115268949A (zh) | 一种镜像预热方法、装置、设备及存储介质 | |
CN113485812B (zh) | 基于大数据量任务的分区并行处理方法及系统 | |
WO2009076877A1 (zh) | 部署、管理sip servlet应用的方法及osgi服务平台 | |
JP6564839B2 (ja) | 組み込み型オペレーティングシステムに基づくmpi実現システムおよび方法 | |
Gui et al. | A Hybrid real-time component model for reconfigurable embedded systems | |
CN113641641A (zh) | 文件存储服务的切换方法、切换系统、设备及存储介质 | |
JP2021184235A5 (zh) | ||
CN115640153B (zh) | 系统架构、消息处理方法、装置、电子设备及存储介质 | |
CN111752728A (zh) | 消息传输方法及装置 | |
CN112269634A (zh) | 一种基于Docker容器部署Ambari组件的方法和系统 | |
CN113176957B (zh) | 一种基于rpc的远程应用自动化系统 | |
CN115878711B (zh) | 一种Redis连接池的实现方法、装置、设备及介质 | |
US20240127111A1 (en) | Internet-of-things-oriented machine learning container image download method and system | |
CN112769638B (zh) | 一种基于dpdk技术的提高jain sip服务器性能的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |