另类执行php的方法[php-dws
另类执行php的方法[php-dws
在寻找简易中文分词技术过程中无意发现这种技术,分享给大家。
这种方法有点另类,但也给了大家一种扩展的思想,技术在变(只有你想不到,没有做不到)。
php-dws是php的另一个全新sapi模块,类似FastCGI但有明显不同,php的输出结果直接发送给用户而不再绕经nginx. 节省的大量的IO操作和增强了可控性
1. 什么是 php-dws ?
php-dws 是 PHP Direct Web Server 的缩写, 是针对 php 的一个新型 sapi 工作模块,
通过 dwsgi 协议与 web server (如 nginx) 协同工作.
(dwsgi: Direct Web Server Gateway Interface)
之所以叫 Direct , 是因为它在执行 php 脚本过程中是直接把输出结果传递给 http client 的
而不是转交 webserver(nginx) 再由 webserver 发送给 http client.
在多数情况下, php-dws 可以用于取代 php/fastcgi 的工作, 并且能更出色的完成.
2. 和 PHP/FastCGI 相比较有什么不同?
1) 我们先看一下下面的示意图了解它们的不同工作原理:
[PHP/FATCGI]
---------------------------------------------------------------------------------------------------------------------
[PHP/DWSGI]
2) 由图可以看出 DWSGI 相比 FASTCGI 有如下明显优势:
i) 节省了很多数据传输, 大大降低繁忙时期的 IO 负载和性能, 由于通常 HTTP 数据都不大,
所以测试数据并不是很明显 100KB 左右的 HTTP 输出大约提升 10~15% 的性能, 输出数据
越大则性能提升越明显;
ii) 给了 php 更直接的输出操控权限, 真正让 php 程序员有机会直接构造自己的 HTTP 输出,
而不再需要受到 webserver 的牵制, 典型的一个情况就是对于长时运行的脚本可以做到
一边执行一边输出, 如下代码:
<?php for($i=1;$i<100;$i++) { echo "$i\n"; ob_flush(); flush(); sleep(1); } ?>
iii) 从此与那恼人的 502 Gateway error 说 byebye!
3) DWSGI 的不足之处, 并不是说 dwsgi 就绝对好了, 它也有以下缺陷:
i) 由于采用 unix domain socket 来实现描述字传递, 所以必须和 web server 同一台服务器;
ii) 目前不支持 win32 系统;
iii) 目前不支持 SSL 传输, 即 https.
3. DWSGI 是个怎么样子的协议?
出于FastCGI的优秀设计以及移植的方便考虑, DWSGI 几乎采用和 FastCGI 一样的协议格式, 但
略有不同.
1) 由于需要传递描述字, 所以 dwsgi server 只能绑定运行在 Unix domain socket 上;
2) 在首次会话发送请求头部时(16bytes), 采用 Sendmsg() 将 HTTP 连接的 socket fd
一并传递给 dwsgi server.
3) dwsgi 收到完整的请求后会发送一个结束包给 webserver, webserver收到后就关闭自身的
HTTP 连接描述符, 把连接读写的权限完全地交给 dwsgi, dwsgi 则可以直接将运行结果以
标准的 HTTP 协议规范发送给用户.
而 fastcgi 是全程保持和 webserver 相连, 输出结果先转交 webserver 由 webserver
作相应的缓冲和处理再转交给用户.
4. php-dws 的工作方式是如何的?
当前的 php-dws 是从原 sapi/cgi 的代码直接修改而来的, 还比较粗糙只支持固定进程数的. 计划
将来改变采用动态 prefork, 并记录相应的进程状态以及统一的配置文件等.
此外, php-dws 把子进程数和每个进程处理的最大请求数均改为启动选项而不再是环境变量, 同时支持
指定较低权限的用户身份来运行.
技术论坛支持:http://www.hightman.cn/bbs/forumdisplay.php?fid=15
php-dws 的特别应用示例 :http://www.hightman.cn/bbs/showthread.php?tid=829
在寻找简易中文分词技术过程中无意发现这种技术,分享给大家。
这种方法有点另类,但也给了大家一种扩展的思想,技术在变(只有你想不到,没有做不到)。
php-dws是php的另一个全新sapi模块,类似FastCGI但有明显不同,php的输出结果直接发送给用户而不再绕经nginx. 节省的大量的IO操作和增强了可控性
1. 什么是 php-dws ?
php-dws 是 PHP Direct Web Server 的缩写, 是针对 php 的一个新型 sapi 工作模块,
通过 dwsgi 协议与 web server (如 nginx) 协同工作.
(dwsgi: Direct Web Server Gateway Interface)
之所以叫 Direct , 是因为它在执行 php 脚本过程中是直接把输出结果传递给 http client 的
而不是转交 webserver(nginx) 再由 webserver 发送给 http client.
在多数情况下, php-dws 可以用于取代 php/fastcgi 的工作, 并且能更出色的完成.
2. 和 PHP/FastCGI 相比较有什么不同?
1) 我们先看一下下面的示意图了解它们的不同工作原理:
[PHP/FATCGI]
1.png (10.31 KB, 下载次数: 1)
---------------------------------------------------------------------------------------------------------------------
[PHP/DWSGI]
2.png (14.91 KB, 下载次数: 1)
2) 由图可以看出 DWSGI 相比 FASTCGI 有如下明显优势:
i) 节省了很多数据传输, 大大降低繁忙时期的 IO 负载和性能, 由于通常 HTTP 数据都不大,
所以测试数据并不是很明显 100KB 左右的 HTTP 输出大约提升 10~15% 的性能, 输出数据
越大则性能提升越明显;
ii) 给了 php 更直接的输出操控权限, 真正让 php 程序员有机会直接构造自己的 HTTP 输出,
而不再需要受到 webserver 的牵制, 典型的一个情况就是对于长时运行的脚本可以做到
一边执行一边输出, 如下代码:
<?php for($i=1;$i<100;$i++) { echo "$i\n"; ob_flush(); flush(); sleep(1); } ?>
iii) 从此与那恼人的 502 Gateway error 说 byebye!
3) DWSGI 的不足之处, 并不是说 dwsgi 就绝对好了, 它也有以下缺陷:
i) 由于采用 unix domain socket 来实现描述字传递, 所以必须和 web server 同一台服务器;
ii) 目前不支持 win32 系统;
iii) 目前不支持 SSL 传输, 即 https.
3. DWSGI 是个怎么样子的协议?
出于FastCGI的优秀设计以及移植的方便考虑, DWSGI 几乎采用和 FastCGI 一样的协议格式, 但
略有不同.
1) 由于需要传递描述字, 所以 dwsgi server 只能绑定运行在 Unix domain socket 上;
2) 在首次会话发送请求头部时(16bytes), 采用 Sendmsg() 将 HTTP 连接的 socket fd
一并传递给 dwsgi server.
3) dwsgi 收到完整的请求后会发送一个结束包给 webserver, webserver收到后就关闭自身的
HTTP 连接描述符, 把连接读写的权限完全地交给 dwsgi, dwsgi 则可以直接将运行结果以
标准的 HTTP 协议规范发送给用户.
而 fastcgi 是全程保持和 webserver 相连, 输出结果先转交 webserver 由 webserver
作相应的缓冲和处理再转交给用户.
4. php-dws 的工作方式是如何的?
当前的 php-dws 是从原 sapi/cgi 的代码直接修改而来的, 还比较粗糙只支持固定进程数的. 计划
将来改变采用动态 prefork, 并记录相应的进程状态以及统一的配置文件等.
此外, php-dws 把子进程数和每个进程处理的最大请求数均改为启动选项而不再是环境变量, 同时支持
指定较低权限的用户身份来运行.
技术论坛支持:http://www.hightman.cn/bbs/forumdisplay.php?fid=15
php-dws 的特别应用示例 :http://www.hightman.cn/bbs/showthread.php?tid=829
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论