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