我用gatewayworker做了一個客服系統(tǒng),但是在使用中,經(jīng)常會遇到 無法連接的問題。于是通過手冊介紹的方法進行了調(diào)試。
發(fā)現(xiàn)有一個 進程是busy,而此時連接正好被分配到了這個worker,就出現(xiàn)了無法連接。
繼續(xù)排查,發(fā)現(xiàn) 是卡在了 等待fd為11的描述事件。然后能看到是發(fā)送一個原子的 cas命令
再繼續(xù)發(fā)現(xiàn),fd為11的是 監(jiān)聽端口 2207的 globaldata服務(wù)。為了保證對進程之間的數(shù)據(jù)的一致性,我采用了globaldata組件,并且為了保證操作的唯一性,我用了cas 操作。根據(jù)手冊的寫法
do
{
$old_value = $new_value = $global->user_list;
$new_value[] = 4;
}
while(!$global->cas('user_list', $old_value, $new_value));
像這樣,寫在一個死循環(huán)中的,這樣如果 globaldata沒有響應(yīng)的話,會一值卡死在這。
到底該怎么解決這個問題呢?還望 walkor老大,不吝賜教!十分感謝!