从上篇的执行流程,可以得出第一个需要思维转换的点:
Swoole是完全的长驻内存的
这个是和web开发第一个很大的不同,之前我们在做web开发,基本不怎么考虑内存控制的问题,这里从两个方面来进行结比:
从上篇的执行流程,可以得出第一个需要思维转换的点:
Swoole是完全的长驻内存的
这个是和web开发第一个很大的不同,之前我们在做web开发,基本不怎么考虑内存控制的问题,这里从两个方面来进行结比:
Mix:高性能 • 极简 • 多功能『 内置 Server 基于 Swoole 的次世代 PHP 开发框架
Group-Co:优雅的PHP异步协程框架,支持SOA服务化调用,适用于API、Http Server、Rpc Server、构建微服务、中间件。适用于高并发,io密集型场景
(1) 内存管理
FixedPool 固定分配内存池
RingBuffer 环形内存缓冲区
(2) 定时器:timefd
(3) 信号处理:signalfd
(4) 数据通信:eventfd + mmap
php做为swoole的宿主,所以了解php本身的运行模式是必不可少的,下图是以cli下执行一个php文件时的完整流程
CI框架在nginx服务器上配置rewrite去掉index.php的方法:
vim /usr/local/webserver/nginx/conf/nginx.conf
项目中引进了ThinkPHP3.2.3的模型层,发现当SQL语句出错时,系统抛出的异常不是我想要的效果,打开文件 ThinkPHP\Library\Think\Db\Driver.class.php
找到代码:
$result = $this->PDOStatement->execute();
当上述PDO语句有异常时(如 SQL语句中数据表不存在),此处就会直接抛出PHP异常,后面的代码不会被执行,页面被中断,这不是我们想要的结果;
找到文件:ThinkPHP\Library\Think\Db\Driver.class.php
找到代码:
// PDO连接参数 protected $options = array( PDO::ATTR_CASE => PDO::CASE_LOWER, // 改为 PDO::CASE_NATURAL PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL, PDO::ATTR_STRINGIFY_FETCHES => false, );
把其中的 PDO::CASE_LOWER 改为 PDO::CASE_NATURAL