简单来说, 容器通过反射机制可获取目标方法的依赖 ( laravel 用反射来获取 typehint 类型约束, 而 Swoft项目似乎与spring 相似, 是从注释上获取的)....然后容器查找是否已注册了 依赖 (dependency) 的实现 (resolver), 如果已注册, 就从容器中生成该依赖, 再注入给目标方法....方案: 每次请求结束时, 主动清洗掉已注册的单例
问题:
重新注册:
注册服务其实开销很大, 尤其是需要大量读文件的初始化(比如翻译组件)
无法区分进程共享的单例, 和请求隔离的单例...., 重新注册所有服务
问题:
CommuneChatbot 遇到的请求隔离问题
多轮对话机器人框架 CommuneChatbot 在启动时需要加载大量多轮对话的逻辑, 消耗时间长 (>100ms), 但实际响应对话的时间不到..., 无法释放, 则会导致内存泄露.