容器的”请求隔离”问题
关于容器, 控制反转与依赖注入
为防止部分读者不了这些概念, 简单说明一下....方案: 每次请求结束时, 主动清洗掉已注册的单例
问题:
重新注册:
注册服务其实开销很大, 尤其是需要大量读文件的初始化(比如翻译组件)
无法区分进程共享的单例, 和请求隔离的单例....利用不了 swoole 的优势, 比起多进程模型只少了 composer autoloader 的加载....方案: 每个请求到来时, 实例化一个新容器, 重新注册所有服务
问题:
CommuneChatbot 遇到的请求隔离问题
多轮对话机器人框架 CommuneChatbot 在启动时需要加载大量多轮对话的逻辑...由于双容器策略基于共同的 interface 开发, 所以只需要为 Laravel Application 定制一个 illuminateAdapter 就可以了
防止内存泄露
使用 swoole, 如果逻辑写得不好导致一些对象相互持有