onmessage 回调使用redis操作数据。服务运行一段时间后,会偶然出现redis取不到数据的情况。也没报链接超时或者异常,可能是什么原因导致的。请问。跟我没关闭redis 链接有关系吗?
这个不好说什么问题。
你可以用redis的时候new个redis,连接存储数据,用完后关闭。看看有没有问题。
证实了这个问题。如果我处理完消息之后不关闭链接确实会偶尔出现redis读取的问题,如果我处理完每个链接请求之后关闭的话则不出现。感觉像是多个进程公用一个redis链接的问题。
嗯,有可能你在主进程(Worker::runAll()运行前的代码都属于主进程)初始化了redis连接导致的。 手册有写,不能在主进程初始化资源类型,会被子进程继承公用造成数据错乱
恩可是,我是在回调里调用的call_user_func_array里操作的redis的按理说应该是属于子进程啊。主进程里只有autoload
这个不好说什么问题。
你可以用redis的时候new个redis,连接存储数据,用完后关闭。看看有没有问题。
证实了这个问题。如果我处理完消息之后不关闭链接确实会偶尔出现redis读取的问题,如果我处理完每个链接请求之后关闭的话则不出现。感觉像是多个进程公用一个redis链接的问题。
嗯,有可能你在主进程(Worker::runAll()运行前的代码都属于主进程)初始化了redis连接导致的。
手册有写,不能在主进程初始化资源类型,会被子进程继承公用造成数据错乱
恩可是,我是在回调里调用的call_user_func_array里操作的redis的按理说应该是属于子进程啊。主进程里只有autoload