假設(shè)我拿workerman來(lái)做http 服務(wù)器,請(qǐng)問(wèn)我是不是不能在onMessage 里面用 $_SERVER,$_GET,$_POST 這些變量?因?yàn)榘次业睦斫?這些變量是全局變量,假設(shè)你在里面使用這些變量,那么獲取到的一定是最新請(qǐng)求那個(gè)人提交上來(lái)的數(shù)據(jù),而無(wú)法保證是現(xiàn)在你當(dāng)前正在處理這個(gè)人提交上來(lái)的,不知道我理解的是不是正確的,知道的請(qǐng)回答一下,謝謝
?每個(gè)請(qǐng)求workerman都會(huì)重置?$_SERVER
,$_GET
,$_POST
,這樣可以保證在onMessage里的這三個(gè)值一直與當(dāng)前請(qǐng)求一致。但是有一點(diǎn)要注意,如果你用到異步組件(帶回調(diào)的),比如定時(shí)器,AsyncTcpConnection等 這些組件的回調(diào)函數(shù)里不能使用$_SERVER
,$_GET
,$_POST
,因?yàn)檫@些回調(diào)執(zhí)行的時(shí)候$_SERVER
,$_GET
,$_POST
已經(jīng)被清理或者改變。
?
例如下面的定時(shí)器用法是錯(cuò)的。
$worker->onMessage = function($con, $data) {
? ? ?Timer::add(10, function(){
? ? ? ? // 此異步回調(diào)執(zhí)行時(shí)?$_SERVER,$_GET,$_POST已經(jīng)被重置
? ? ? ? var_dump($_SERVER,$_GET,$_POST);
? ? });
};
打印的是三個(gè)空
下面的方法是正確的
$worker->onMessage = function($con, $data) {
? ? ?$get = $_GET; $post = $_POST; $server = $_SERVER;
? ? ?Timer::add(10, function()use($get, $post, $server){
? ? ? ? var_dump($server,$get,$post);
? ? });
};
另外,除了用$_SERVER
,$_GET
,$_POST
,你可以使用onMessage里的$data參數(shù)來(lái)獲取$_SERVER
,$_GET
,$_POST
的值,$data
為臨時(shí)變量,使用會(huì)更安全。