写一个WEB服务器,如果用file_get_contents从磁盘中读取文件,并发直线下降,用sendfile可以提升性能。但是PHP不支持,开发扩展我又不会,只能靠抄袭PHP扩展源码维持一下生活这样子。
看一下sendfile的原型:
这个函数在linux2.6.3之前的内核,out_fd只能是socket类型。
我们要实现的sendfile的PHP函数原型也差不多,为了简单,我就不要offset这个参数了,而且规定out_fd必须是stream类型的资源,in_fd必须是普通文件类型的资源:
mixed sendfile(resource $out_fd, resource $in_fd, int $count);
生成开发骨架,怎么办,不会,Google一下,好像运行个命令就可以了:
php ./ext_skel.php --ext church
cd church
我用的php7.3版本,好像无需手动去注释,也好,省事。按照网上的教程,不管三七二十一,先复制一份 PHP_FUNCTION(sendfile)
.
PHP_FUNCTION(sendfile)
{
}
接下来咋办?我又不会,只能看看别人怎么搞的,到ext里面找找,好像都得先接收传过来的变量。唉,试试吧,我又不会能怎么办。
PHP_FUNCTION(sendfile)
{
zval *out;
zval *in;
zend_long count = 0;
ZEND_PARSE_PARAMETERS_START(3, 3)
Z_PARAM_RESOURCE(out)
Z_PARAM_RESOURCE(in)