国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

workerman做http并發(fā)問(wèn)題

q13113671764

假設(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)回答一下,謝謝

4227 1 1
1個(gè)回答

walkor 打賞

?每個(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ì)更安全。

  • 暫無(wú)評(píng)論
年代過(guò)于久遠(yuǎn),無(wú)法發(fā)表回答
??