8个子进程,一个telent连接会有其中三个子进程响应,原理是什么呢?

sunshine

在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中多次输入内容,回车会有同一个进程响应

2016-11-09 17:42:17 pid:32886 检测到响应32886
2016-11-09 17:42:18 pid:32886 检测到响应32886
2016-11-09 17:42:20 pid:32886 检测到响应32886
2016-11-09 17:42:21 pid:32886 检测到响应32886
2016-11-09 17:42:22 pid:32886 检测到响应32886
2016-11-09 17:42:23 pid:32886 检测到响应32886

请教这里面的原理是什么?

2902 1 0
1个回答

walkor

acceptConnection时有三个进程响应是因为发生了惊群效应。
惊群效应参见 http://wenda.workerman.net/?/question/179

最终只有一个进程acceptConnection成功,以后都由这个进程负责处理这个telnet链接上发来的数据,
所以一个telnet客户端发送的内容只有一个进程响应

年代过于久远,无法发表回答
🔝