主頁(yè)demo 聊天室,如果在代碼中對(duì)某個(gè)用戶的發(fā)言做延時(shí)處理,例如:
在文件Applications\Chat\Event.php 的100行位置添加如下代碼:
if($client_name=='3333')
{
sleep(10);
}
即用戶3333的發(fā)言會(huì)延時(shí)10s在處理。
這個(gè)時(shí)候發(fā)現(xiàn),用戶3333發(fā)言后,其它用戶立即發(fā)言,其它用戶的發(fā)言會(huì)被阻塞,這個(gè)怎么解決???
這個(gè)是編程常識(shí),sleep會(huì)使當(dāng)前進(jìn)程進(jìn)入睡眠,會(huì)導(dǎo)致當(dāng)前進(jìn)程無(wú)法響應(yīng)其它請(qǐng)求。
workerman在linux下是支持多進(jìn)程的,如果請(qǐng)求被分配到sleep的進(jìn)程,則會(huì)導(dǎo)致請(qǐng)求無(wú)法響應(yīng);如果請(qǐng)求被分配到了正常的進(jìn)程,則會(huì)正常響應(yīng)。
業(yè)務(wù)代碼里面請(qǐng)不要有sleep語(yǔ)句,如果有較重的任務(wù)可以交給其它進(jìn)程處理,或者說(shuō)交給其它服務(wù)器或者集群的進(jìn)程去處理,這樣可以用更多的進(jìn)程/服務(wù)器承擔(dān)負(fù)載,保證業(yè)務(wù)主流程不阻塞。方法參見(jiàn)http://wenda.workerman.net/?/question/358