用 SYSOP 风格的方法研究 spawn-fcgi

不怕大家笑话,以前我一直不明白为啥会有 spawn-fcgi 这个东西。因为以前都是用 PHP 啊,PHP 本身就是可以并发处理多个请求的 fastcgi server 啊,要 spawn-fcgi 干啥用呢?更有意思的是有人用 spawn-fcgi 启动多个 php-cgi ,然后这个 php-cgi 再启动多个子进程,不知道有什么好处。

前几天,我读了一下代码,还是没太明白这个东西存在的必要性,于是就用我们 SYSOP 的方法研究了一下 spawn-fcgi:

fakefcgi.sh脚本文件
#!/bin/sh
ls -l /proc/self/fd/ >/var/log/$$.txt
sleep 600s

执行
spawn-fcgi -p 3333 -F 5 -- ./fakefcgi.sh
得到结果
spawn-fcgi: child spawned successfully: PID: 16868
spawn-fcgi: child spawned successfully: PID: 16871
spawn-fcgi: child spawned successfully: PID: 16872
spawn-fcgi: child spawned successfully: PID: 16873
spawn-fcgi: child spawned successfully: PID: 16874

执行pstree发现spawn-fcgi没在运行,各个fakefcgi.sh都直接隶属于init。看来是个daemonizer。

再看日志文件:
# cat *.txt
总用量 0
lrwx------ 1 root root 64 10月 22 14:07 0 -> socket:[281459]
l-wx------ 1 root root 64 10月 22 14:07 1 -> /var/log/16868.txt
lrwx------ 1 root root 64 10月 22 14:07 2 -> /dev/null
lr-x------ 1 root root 64 10月 22 14:07 3 -> /proc/16869/fd
总用量 0
lrwx------ 1 root root 64 10月 22 14:07 0 -> socket:[281459]
l-wx------ 1 root root 64 10月 22 14:07 1 -> /var/log/16871.txt
lrwx------ 1 root root 64 10月 22 14:07 2 -> /dev/null
lr-x------ 1 root root 64 10月 22 14:07 3 -> /proc/16875/fd
总用量 0
lrwx------ 1 root root 64 10月 22 14:07 0 -> socket:[281459]
l-wx------ 1 root root 64 10月 22 14:07 1 -> /var/log/16872.txt
lrwx------ 1 root root 64 10月 22 14:07 2 -> /dev/null
lr-x------ 1 root root 64 10月 22 14:07 3 -> /proc/16877/fd
总用量 0
lrwx------ 1 root root 64 10月 22 14:07 0 -> socket:[281459]
l-wx------ 1 root root 64 10月 22 14:07 1 -> /var/log/16873.txt
lrwx------ 1 root root 64 10月 22 14:07 2 -> /dev/null
lr-x------ 1 root root 64 10月 22 14:07 3 -> /proc/16876/fd
总用量 0
lrwx------ 1 root root 64 10月 22 14:07 0 -> socket:[281459]
l-wx------ 1 root root 64 10月 22 14:07 1 -> /var/log/16874.txt
lrwx------ 1 root root 64 10月 22 14:07 2 -> /dev/null
lr-x------ 1 root root 64 10月 22 14:07 3 -> /proc/16878/fd

执行
# netstat -ane|grep 281459
其中 281459 是前面的 socket 号码。得到的结果是:
tcp        0      0 0.0.0.0:3333            0.0.0.0:*               LISTEN    0          281459
现在明白了,原来spawn-fcgi只是让多个单循环的 fastcgi server 监听在同一socket上而已。直接调用 libfcgi 库,主程序里只有一个 fastcgi 处理循环,这样开发出来的 fastcgi server 就需要 spawn-fcgi 配合,要不然就无法处理并发的请求。

This entry was posted in 默认分类 and tagged , , . Bookmark the permalink.

One Response to 用 SYSOP 风格的方法研究 spawn-fcgi

Leave a Reply

Your email address will not be published. Required fields are marked *