3X版本 在Application/MyApp/Redis/Reids.php 下 寫了個(gè)連接redis的代碼 如下
public function __construct($config = array()){
self::$redis = new \Redis();
self::$redis->pconnect($config,$config);
}
return self::$redis;
}
然后在MyApp/start.php里面使用
$config = array(
'host'=>'127.0.0.1',
'port'=>6379,
'timeout'=>1,
'database'=>0
);
$redis = new Redis\Redis($config);
報(bào)錯(cuò)
PHP Fatal error: Uncaught exception 'RedisException' with message 'Redis server went away' in web/tom-workerman/Applications/MyApp/start.php:50 Stack trace:
請(qǐng)問這個(gè)是什么原因? 直接在start.php里面寫redis連接,并且操作是可以的
start.php中初始化的連接屬于主進(jìn)程的,主進(jìn)程fork的子進(jìn)程會(huì)自動(dòng)繼承這個(gè)示例,但是子進(jìn)程無法使用這個(gè)實(shí)例,原因是服務(wù)端返回?cái)?shù)據(jù)時(shí),每個(gè)子進(jìn)程都可讀這個(gè)數(shù)據(jù),會(huì)造成實(shí)際混亂。
onXXX回調(diào)都是運(yùn)行在子進(jìn)程的。請(qǐng)?jiān)趏nXXX等回調(diào)中初始化連接,比如onWorkerStart會(huì)調(diào)中初始化連接。每個(gè)子進(jìn)程初始化自己的連接,這樣就不會(huì)出錯(cuò)了。