swoole常驻内存注意事项
laravels 的注意事项
-
应通过
Illuminate\Http\Request
对象来获取请求信息$_ENV
是可读取的,$_SERVER
是部分可读的,不能使用$_GET
、$_POST
、$_FILES
、$_COOKIE
、$_REQUEST
、$_SESSION
、$GLOBALS
-
使用
$request->getContent()
来取代php://input
-
推荐通过返回
Illuminate\Http\Response
对象来响应请求,兼容echo
、vardump()
、print_r()
,不能使用函数像dd()
、exit()
、die()
、header()
、setcookie()
、http_response_code()
-
各种单例的连接将被常驻内存,建议开启持久连接
-
你声明的全局、静态变量必须手动清理或重置
-
无限追加元素到静态或全局变量中,将导致内存爆满
-
是用swoole优化之后 尽量不适用static 声明静态变量,也没有那个必要,这里有简单的方法去偷懒,就是把laravels.php配置文件中的 max_request降低一点这样它重启的频率就会大一点,以免单进程的内存暴了
-
单例问题 ,laravel框架到处都用了单例。
-
传统FPM下,单例模式的对象的生命周期仅在每次请求中,请求开始=>实例化单例=>请求结束后=>单例对象资源回收。
-
Swoole Server下,所有单例对象会常驻于内存,这个时候单例对象的生命周期与FPM不同,请求开始=>实例化单例=>请求结束=>单例对象依旧保留,需要开发者自己维护单例的状态
-
详见laravels文档,作者提供了详细的解决方案主要就是 Session,Passport,JWT的使用
-
如果要使用laravels,强烈建议先把这个laravels结构熟读于心,并且了解初始larvel的功能,毕竟常驻内存和平常的php-fpm编程还是有很大的不同
-
引入laravels 不仅仅是提高了并发,而且可以方便的使用swoole的功能,比如websocket,协程,多进程等
-
由于larvels是常驻内存,所以每次修改代码之后要看见效果就需要重启./bin/laravels reload,这个作者也提供了解决方案哦 自动reload
-
laravels 初步在小型项目使用 ,用户认证包括(session 和jwt) ,Eloquent ORM,路由,Artisan 命令行 ,Blade模板渲染都没有问题。