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

workerman做http并發(fā)問題

q13113671764

假設我拿workerman來做http 服務器,請問我是不是不能在onMessage 里面用 $_SERVER,$_GET,$_POST 這些變量?因為按我的理解,這些變量是全局變量,假設你在里面使用這些變量,那么獲取到的一定是最新請求那個人提交上來的數(shù)據(jù),而無法保證是現(xiàn)在你當前正在處理這個人提交上來的,不知道我理解的是不是正確的,知道的請回答一下,謝謝

4226 1 1
1個回答

walkor 打賞

?每個請求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為臨時變量,使用會更安全。

  • 暫無評論
年代過于久遠,無法發(fā)表回答
??