swoole常驻内存注意事项

laravels 的注意事项

  1. 应通过 Illuminate\Http\Request 对象来获取请求信息 $_ENV 是可读取的,$_SERVER 是部分可读的,不能使用$_GET$_POST$_FILES$_COOKIE$_REQUEST$_SESSION$GLOBALS

  2. 使用 $request->getContent() 来取代 php://input

  3. 推荐通过返回 Illuminate\Http\Response 对象来响应请求,兼容echovardump()print_r(),不能使用函数像 dd()exit()die()header()setcookie()http_response_code()

  4. 各种单例的连接将被常驻内存,建议开启持久连接

  5. 你声明的全局、静态变量必须手动清理或重置

  6. 无限追加元素到静态或全局变量中,将导致内存爆满

  7. 是用swoole优化之后 尽量不适用static 声明静态变量,也没有那个必要,这里有简单的方法去偷懒,就是把laravels.php配置文件中的 max_request降低一点这样它重启的频率就会大一点,以免单进程的内存暴了

  8. 单例问题 ,laravel框架到处都用了单例。

  9. 传统FPM下,单例模式的对象的生命周期仅在每次请求中,请求开始=>实例化单例=>请求结束后=>单例对象资源回收。

  10. Swoole Server下,所有单例对象会常驻于内存,这个时候单例对象的生命周期与FPM不同,请求开始=>实例化单例=>请求结束=>单例对象依旧保留,需要开发者自己维护单例的状态

  11. 详见laravels文档,作者提供了详细的解决方案主要就是 Session,Passport,JWT的使用

  12. 如果要使用laravels,强烈建议先把这个laravels结构熟读于心,并且了解初始larvel的功能,毕竟常驻内存和平常的php-fpm编程还是有很大的不同

  13. 引入laravels 不仅仅是提高了并发,而且可以方便的使用swoole的功能,比如websocket,协程,多进程等

  14. 由于larvels是常驻内存,所以每次修改代码之后要看见效果就需要重启./bin/laravels reload,这个作者也提供了解决方案哦 自动reload

  15. laravels 初步在小型项目使用 ,用户认证包括(session 和jwt) ,Eloquent ORM,路由,Artisan 命令行 ,Blade模板渲染都没有问题。