swoole里面的关于全局变量的坑和解决方案
首先,抛出答案
- swoole里面的全局变量,比如:
global $a
,static
,在同一个work进程里面,它是不会在请求结束后自动销毁和还原的,特别是你有做一些累加或者修改的操作,如果你不主动销毁复原,这个work的下一个请求进来,这些全局变量的值依然会存在,不会初始化。官方文档 - 不同work之间的全局变量,是相互隔离的,并不会产生影响。官方文档
单个work里面的全局变量
我们举个例子来看,为了防止每次请求可能分到不同的work里面,我们设置只启动1个work进程:
<?php
class User {
static $name = [];
}
$server = new Swoole\Http\Server('127.0.0.1', 9500);
$server->set([
'worker_num' => 1,
'daemonize' => false,
]);
$i = 1;
$server->on('Request', function ($request, $response) {
global $i