在workerman中用self::log(getmypid())做了下日志,啟動(dòng)的時(shí)候會(huì)生成8個(gè)子進(jìn)程。
2016-11-09 17:42:06 pid:32878 Workerman start in DEBUG mode
2016-11-09 17:42:06 pid:32879 啟動(dòng)子進(jìn)程32879
2016-11-09 17:42:06 pid:32880 啟動(dòng)子進(jìn)程32880
2016-11-09 17:42:06 pid:32881 啟動(dòng)子進(jìn)程32881
2016-11-09 17:42:06 pid:32882 啟動(dòng)子進(jìn)程32882
2016-11-09 17:42:06 pid:32883 啟動(dòng)子進(jìn)程32883
2016-11-09 17:42:06 pid:32884 啟動(dòng)子進(jìn)程32884
2016-11-09 17:42:06 pid:32886 啟動(dòng)子進(jìn)程32886
2016-11-09 17:42:06 pid:32885 啟動(dòng)子進(jìn)程32885
然后telnet 0.0.0.0 2345,在acceptConnection方法中會(huì)打印三個(gè)進(jìn)程號(hào)。(為什么是3個(gè)呢?)
2016-11-09 17:42:14 pid:32886 檢測(cè)到連接32886
2016-11-09 17:42:14 pid:32885 檢測(cè)到連接32885
2016-11-09 17:42:14 pid:32884 檢測(cè)到連接32884
在telnet中多次輸入內(nèi)容,回車會(huì)有同一個(gè)進(jìn)程響應(yīng)
2016-11-09 17:42:17 pid:32886 檢測(cè)到響應(yīng)32886
2016-11-09 17:42:18 pid:32886 檢測(cè)到響應(yīng)32886
2016-11-09 17:42:20 pid:32886 檢測(cè)到響應(yīng)32886
2016-11-09 17:42:21 pid:32886 檢測(cè)到響應(yīng)32886
2016-11-09 17:42:22 pid:32886 檢測(cè)到響應(yīng)32886
2016-11-09 17:42:23 pid:32886 檢測(cè)到響應(yīng)32886
請(qǐng)教這里面的原理是什么?
acceptConnection時(shí)有三個(gè)進(jìn)程響應(yīng)是因?yàn)榘l(fā)生了驚群效應(yīng)。
驚群效應(yīng)參見(jiàn) http://wenda.workerman.net/?/question/179
最終只有一個(gè)進(jìn)程acceptConnection成功,以后都由這個(gè)進(jìn)程負(fù)責(zé)處理這個(gè)telnet鏈接上發(fā)來(lái)的數(shù)據(jù),
所以一個(gè)telnet客戶端發(fā)送的內(nèi)容只有一個(gè)進(jìn)程響應(yīng)