2012-09-07 39 views
0

我想写一个网络服务器。我不想为php编写模块,所以我想我会传递信息到php-fpm,比如nginx和apache。我做了一些研究,并设置为原型,但无法使其工作。如何将信息从cli或服务器传递到fastcgi(php-fpm)并返回?

我已经建立了一个php服务,监听端口9999,在每个连接上都会打印print_r($ GLOBALS)。我设置了nginx将php请求传递给127.0.0.1:9999。请求被传递,但只有argc(1)和argv(php服务的路径)以及$ _SERVER变量被填充。 $ _SERVER vars有很多关于php进程正在执行的当前环境的信息,但是我没有看到有关连接用户或其请求的任何信息 - 没有REMOTE_ADDR,没有QUERY_STRING,也没有任何信息...

我很难找到如何将这些信息从cli或从原型服务器传递到fastcgi php进程的文档。我已经找到了一些旧的CGI变量的列表,但没有关于如何通过它们的信息,或者它们中的任何一个与fastcgi过时有关。

因此,我再次问你如何从你的服务器原型或cli传递信息到一个php-fpm或fastcgi过程 - 或者,我可以在这个主题上找到适当的,清晰明确的文档? (并且不,RFC不是答案)。我在fastcgi.com和维基百科以及众多其他搜索结果斋读书...

===更新===

我已经得到了一个工作FastCGI的“服务”起来通过php中的原型运行。它在9999上侦听,解析来自cli甚至来自nginx的二进制fcgi请求,它格式化一个二进制fcgi响应,通过网络发送它,并且cli显示它正常,并且nginx甚至将解码后的fcgi响应返回给浏览器就像大自然的意图。

现在,当我尝试以其他方式做事情 - 写我的原型服务器,形成一个二进制fcgi数据包,并将其发送到PHP-FPM,我没有什么 - 没有错误输出在cli或从错误日志(我不能以任何方式将php-fpm写入错误日志[-_-])。所以,为什么不会给我一些回应,无论是在错误文本,或二进制网络数据包,或任何东西?我可以将数据从cli发送到fastcgi,但是我不能得到任何回应,除非它是我自己的fastcgi过程(并且不,我没有接管php-fpm的端口-i'm在9999年和9000年)。

=============

TIA \米/(> _ <)\米/

回答

0

得到它。

服务器将信息以网络数据包的形式传递给fastcgi进程。非常类似于dns数据包,您必须使用您的语言的各个二进制字符处理函数来制定packate(包括头文件和有效负载信息),然后通过管道/网络将其发送到fastcgi服务器,fastcgi服务器然后将解析二进制数据包成为回应。有趣的东西 - 可以有更好的文件记录,嗯: - \

哦,如果你原型的听众在PHP中,你不能通过任何PHP变量访问这个数据包,你实际上必须读取连接,重新监听(因为它是一个二进制网络数据包,而不是纯文本“发布”数据)。

我已经设法通过php中的原型来运行fastcgi“服务”。它在9999上侦听,解析来自cli甚至来自nginx的二进制fcgi请求,它格式化一个二进制fcgi响应,通过网络发送它,并且cli显示它正常,并且nginx甚至将解码后的fcgi响应返回给浏览器就像大自然的意图。

相关问题