假设有一个静态类
class Data{
static $rules;
}
我在new Worker 前对$rules进行了赋值操作,后面在 $worker->onMessage(){} 里面进行了修改。
那么在onMessage的操作其余的进程能否读取到操作后的?
多进程之间onMessage是如何区别当前属于哪个进程,为什么我在
$worker->onMessage=function($connection){
echo $connection->id;
//固定的
};
如何调试各个进程的$rules的状态?
1、读不到: 多进程之间的进程变量是彼此隔离的,是不能直接互相访问的,如果要共享的话,需要借助GlobalData、redis组件来实现;
2、区分各个进程: 每个进程都有一个唯一的id编号,其实本质和进程ID是以一对一的概念抽象,可以这样获取区分:
3、connection->id固定: 这个是每个tcp连接的id编号,当前活动进程内自增唯一,最大值为PHP_INT_MAX。
在此基础之上,有没有方法控制链接请求走哪个$worker_id ?貌似本地测试的时候一直是$connection->worker->id =1 的在响应
1、这个没法控制的,哪个进程去accept哪个连接请求这是由操作系统内核调度的。
2、不要被"某个连接一直似乎被某个进程在处理"的表面现象给迷惑了,你多压测连接量自然就看出不是这么回事了,一个进程能一直在处理,只能说明这个进程还是不够繁忙能够处理过来。