假設我拿workerman來做http 服務器,請問我是不是不能在onMessage 里面用 $_SERVER,$_GET,$_POST 這些變量?因為按我的理解,這些變量是全局變量,假設你在里面使用這些變量,那么獲取到的一定是最新請求那個人提交上來的數(shù)據(jù),而無法保證是現(xiàn)在你當前正在處理這個人提交上來的,不知道我理解的是不是正確的,知道的請回答一下,謝謝
?每個請求workerman都會重置?$_SERVER
,$_GET
,$_POST
,這樣可以保證在onMessage里的這三個值一直與當前請求一致。但是有一點要注意,如果你用到異步組件(帶回調的),比如定時器,AsyncTcpConnection等 這些組件的回調函數(shù)里不能使用$_SERVER
,$_GET
,$_POST
,因為這些回調執(zhí)行的時候$_SERVER
,$_GET
,$_POST
已經(jīng)被清理或者改變。
?
例如下面的定時器用法是錯的。
$worker->onMessage = function($con, $data) {
? ? ?Timer::add(10, function(){
? ? ? ? // 此異步回調執(zhí)行時?$_SERVER,$_GET,$_POST已經(jīng)被重置
? ? ? ? var_dump($_SERVER,$_GET,$_POST);
? ? });
};
打印的是三個空
下面的方法是正確的
$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ù)來獲取$_SERVER
,$_GET
,$_POST
的值,$data
為臨時變量,使用會更安全。