swoole实际开发注意问题

全局变量的使用

全局变量初始化

假如,第一次请求进来对全局变量 global $a =1 进行操作值从 1 变为 2 ,如果进行还原或者销毁,第二次请求进来,global $a 还会是等于 2 ,这是因为swoole的常驻内存,全局变量是存储在Worker进程内存中的。

所以使用全局变量时,记得需要手动 unset() 释放或者进行还原

全局变量不共用

这是因为全局变量储存在不同的Worker进程内,进程的内存是隔离性的。

可以借助swoole内的swooole/Table,或者redis、mysql这类中间件实现全局变量,去官方文档看

终止函数的使用

使用 exit() 、die() 都会终止和退出当前进程,对于 php-fpm 来说,每个请求都是独立的进程,退出了不会有影响,但是在 swoole 当中,可能一个进程在同时处理多个请求,如果你使用了 exit() 终止可能会导致其它请求也终止。

内存泄漏

php-fpm的内存是请求结束后会自动回收,但swoole是常驻型内存,如果swoole使用了全局变量没有进行回收,即使请求完了,全局变量依然在swoole的进程中,所以一定要注重变量回收的重要性。

http请求获取参数

在使用swoole作为http的服务器时,$_GET 和 $_POST等常见的全局变量是无法使用的,这是因为它们是全局变量,在swoole中使用是有问题的,可以用swoole回调时提供的 Request 来代替获取参数。

var_dump()和echo()输出不到浏览器(http响应)

原因是使用swoole拓展后,php运行模式不在是fpm了,而是cli(命令行模式)了,想要响应http请求,需要使用swoole的 Http request 回调中的 response 对象进行响应