方案: 每次请求结束时, 主动清洗掉已注册的单例
问题:
重新注册:
注册服务其实开销很大, 尤其是需要大量读文件的初始化(比如翻译组件)
无法区分进程共享的单例, 和请求隔离的单例....利用不了 swoole 的优势, 比起多进程模型只少了 composer autoloader 的加载....方案: 每个请求到来时, 实例化一个新容器, 重新注册所有服务
问题:
CommuneChatbot 遇到的请求隔离问题
多轮对话机器人框架 CommuneChatbot 在启动时需要加载大量多轮对话的逻辑...中, 类似 laravel 的 serviceProvider 分两处注册.
// 在worker中注册的服务, 多个请求共享
'processProviders' => [
// 基础组件加载....
// 只有自己没有绑定, 且父容器有绑定的情况下, 才通过父类来做实例化.