假設(shè)有一個靜態(tài)類
class Data{
static $rules;
}
我在new Worker 前對$rules進行了賦值操作,后面在 $worker->onMessage(){} 里面進行了修改。
那么在onMessage的操作其余的進程能否讀取到操作后的?
多進程之間onMessage是如何區(qū)別當(dāng)前屬于哪個進程,為什么我在
$worker->onMessage=function($connection){
echo $connection->id;
//固定的
};
如何調(diào)試各個進程的$rules的狀態(tài)?
1、讀不到: 多進程之間的進程變量是彼此隔離的,是不能直接互相訪問的,如果要共享的話,需要借助GlobalData、redis組件來實現(xiàn);
2、區(qū)分各個進程: 每個進程都有一個唯一的id編號,其實本質(zhì)和進程ID是以一對一的概念抽象,可以這樣獲取區(qū)分:
$worker_id = $connection->worker->id;
3、connection->id固定: 這個是每個tcp連接的id編號,當(dāng)前活動進程內(nèi)自增唯一,最大值為PHP_INT_MAX。
在此基礎(chǔ)之上,有沒有方法控制鏈接請求走哪個$worker_id ?貌似本地測試的時候一直是$connection->worker->id =1 的在響應(yīng)
1、這個沒法控制的,哪個進程去accept哪個連接請求這是由操作系統(tǒng)內(nèi)核調(diào)度的。
2、不要被"某個連接一直似乎被某個進程在處理"的表面現(xiàn)象給迷惑了,你多壓測連接量自然就看出不是這么回事了,一個進程能一直在處理,只能說明這個進程還是不夠繁忙能夠處理過來。