假设我拿workerman来做http 服务器,请问我是不是不能在onMessage 里面用 $_SERVER,$_GET,$_POST 这些变量?因为按我的理解,这些变量是全局变量,假设你在里面使用这些变量,那么获取到的一定是最新请求那个人提交上来的数据,而无法保证是现在你当前正在处理这个人提交上来的,不知道我理解的是不是正确的,知道的请回答一下,谢谢
每个请求workerman都会重置 $_SERVER,$_GET,$_POST,这样可以保证在onMessage里的这三个值一直与当前请求一致。但是有一点要注意,如果你用到异步组件(带回调的),比如定时器,AsyncTcpConnection等 这些组件的回调函数里不能使用$_SERVER,$_GET,$_POST,因为这些回调执行的时候$_SERVER,$_GET,$_POST已经被清理或者改变。 例如下面的定时器用法是错的。
$_SERVER
$_GET
$_POST
$worker->onMessage = function($con, $data) { Timer::add(10, function(){ // 此异步回调执行时 $_SERVER,$_GET,$_POST已经被重置 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参数来获取$_SERVER,$_GET,$_POST的值,$data为临时变量,使用会更安全。
$data
每个请求workerman都会重置
$_SERVER
,$_GET
,$_POST
,这样可以保证在onMessage里的这三个值一直与当前请求一致。但是有一点要注意,如果你用到异步组件(带回调的),比如定时器,AsyncTcpConnection等 这些组件的回调函数里不能使用$_SERVER
,$_GET
,$_POST
,因为这些回调执行的时候$_SERVER
,$_GET
,$_POST
已经被清理或者改变。例如下面的定时器用法是错的。
打印的是三个空
下面的方法是正确的
另外,除了用
$_SERVER
,$_GET
,$_POST
,你可以使用onMessage里的$data参数来获取$_SERVER
,$_GET
,$_POST
的值,$data
为临时变量,使用会更安全。