WorkerMan调式模式MySQL查询正常,守护模式(-d启动)时,MySQL查询不到数据,增删改查返回空白(注:MySQL操作使用PDO,数据库操作类为自己封装,Autoloader加载过来)
https://www.workerman.net/doc/workerman/development/before-development.html#%E4%B8%89%E3%80%81%E5%8C%BA%E5%88%86%E4%B8%BB%E8%BF%9B%E7%A8%8B%E5%92%8C%E5%AD%90%E8%BF%9B%E7%A8%8B
数据库连接不要提前初始化,建议放在onWorkerStart里初始化
我去试下,谢谢
放到onWorkerStart里初始化后可以了,可是我的初始化Redis的时候没有放到onWorkerStart中却可以正常使用
扩展实现不一样,比如redis扩展有重连机制,pdo没有。 守护进程时最开始的启动进程fork子进程后会退出,退出时所有连接资源将会关闭,mysql服务端会检测到连接断开并关闭连接。但是workerman所有子进程由于继承了同一个mysql连接资源,所有子进程的mysql连接也会关闭,pdo mysql没有重连机制,使用已经断开的pdo对象就会出现问题了。但是redis扩展自己带重连功能,所以看着没问题。
建议初始化都在onWorkerStart中进行,毕竟每一个拓展的底层实现并不统一,不一定都支持fork后的一些重置初始化操作
明白了,谢谢大佬们指导问题
https://www.workerman.net/doc/workerman/development/before-development.html#%E4%B8%89%E3%80%81%E5%8C%BA%E5%88%86%E4%B8%BB%E8%BF%9B%E7%A8%8B%E5%92%8C%E5%AD%90%E8%BF%9B%E7%A8%8B
数据库连接不要提前初始化,建议放在onWorkerStart里初始化
我去试下,谢谢
放到onWorkerStart里初始化后可以了,可是我的初始化Redis的时候没有放到onWorkerStart中却可以正常使用
扩展实现不一样,比如redis扩展有重连机制,pdo没有。
守护进程时最开始的启动进程fork子进程后会退出,退出时所有连接资源将会关闭,mysql服务端会检测到连接断开并关闭连接。但是workerman所有子进程由于继承了同一个mysql连接资源,所有子进程的mysql连接也会关闭,pdo mysql没有重连机制,使用已经断开的pdo对象就会出现问题了。但是redis扩展自己带重连功能,所以看着没问题。
建议初始化都在onWorkerStart中进行,毕竟每一个拓展的底层实现并不统一,不一定都支持fork后的一些重置初始化操作
明白了,谢谢大佬们指导问题