我经常在Web开发方面看到"业务逻辑"和"应用程序逻辑"这两个短语(我认为它也适用于一般的编程而不仅仅是Web开发).
这对我来说很新,所以我真的不知道这意味着什么,有谁能解释一下这究竟是什么意思?它只是程序员使用的"热门词汇"吗?要么?
我几乎已经完成了在Java下编写符合HTTP/1.0标准的Web服务器(没有商业用途,这只是为了好玩),基本上我想要包含PHP支持.我意识到这根本不是一件容易的事,但我认为这将是一项不错的成就.
所以我想知道PHP如何与Apache Web服务器(或任何其他Web服务器)完全接口,因此我可以从中学习并编写自己的PHP包装器.它不一定是mod_php,我不介意编写FastCGI包装器 - 据我所知,它也能运行PHP.
我认为所有PHP需要的是输出到客户端(因此它可以解释PHP部分),来自客户端的完整HTTP请求(因此它可以提取POST变量等)和客户端的主机名.然后,您只需获取已解析的PHP代码并将其写入输出流.可能会有更多的东西,但实质上我会认为它的工作原理.
从我到目前为止收集的内容来看,apache2handler提供了一个API,PHP利用它来"连接"到Apache.我想看看apache2handler和php5apache2.dll左右的源代码是一个想法,但在我这样做之前,我想我先问问.
如果有人有更多的信息,经验或某种与此相关的规范,请告诉我.
提前致谢!
编辑:更新 - 向下滚动
编辑2:更新 - 问题解决了
我正在用Java编写我自己的网络服务器,几天前我问过Apache如何与PHP接口,所以我可以实现PHP支持.我了解到FastCGI是最好的方法(因为mod_php不是一个选项).所以我查看了FastCGI协议规范,并设法为我的服务器编写了一个可用的FastCGI包装器.我已经测试了phpinfo()并且它可以工作,实际上所有的PHP函数似乎都运行得很好(发布数据,会话,日期/时间等等).
我的网络服务器能够同时处理请求(即user1可以在user2请求some_large_binary_file.zip的同时检索file1.html),它通过为每个用户请求生成一个新的Java线程(在完成或用户与客户端的连接时终止)来完成此操作取消).
但是,它不能同时处理2个(或更多)FastCGI请求.它的作用是,它将它们排队,所以当请求1立即完成后,它开始处理请求2.我用2个PHP页面测试了它,一个包含sleep(10),另一个包含phpinfo().
我将如何处理多个请求,因为我知道它可以完成(IIS下的PHP运行为FastCGI,它可以处理多个请求就好了).
更多信息:
我在windows下编码,我用于执行php-cgi.exe的批处理文件包含:
set PHP_FCGI_CHILDREN=8
set PHP_FCGI_MAX_REQUESTS=500
php-cgi.exe -b 9000
Run Code Online (Sandbox Code Playgroud)
但它不会产生8个孩子,该服务只是在500个请求后终止.
我从维基百科做过研究:
通过使用具有内部多路复用的单个连接(即,通过单个连接的多个请求)和/或通过使用多个连接来实现同时处理多个请求
现在很明显,多个连接对我来说不起作用,因为每次客户端请求涉及FastCGI的内容时,它都会为FastCGI应用程序创建一个新的套接字,但它并不能同时工作(而是将它们排队等).
我知道在相同连接下对FastCGI请求进行内部多路复用是通过发出具有不同请求ID的每个唯一FastCGI请求来完成的.(另见的"通信协议"标题中的最后3段这篇文章).
我没有对此进行过测试,但我将如何实现呢?我认为我需要某种FastCGI Java线程,它包含某种类型的Map和一个静态函数,我可以使用它来添加请求.然后在Thread的run()函数中它将有一个while循环,并且对于每个循环,它将检查Map是否包含新请求,如果是,它将为它们分配请求ID并将它们写入FastCGI流.然后等待输入等等,你可以看到这变得太复杂了.
有谁知道这样做的正确方法?还是有任何想法?非常感谢.
注意,如果需要,我可以提供我的FastCGI包装器的代码.
更新:
基本上,我下载了nginx并将其设置为使用PHP作为FastCGI应用程序,它也遇到了与我的服务器相同的问题.它无法处理并发的PHP请求.这让我相信我的代码实际上是正确的.所以PHP出了问题,或者我没有正确设置它.也许是因为我使用的是Windows,因为一些lighttpd用户声称Windows无法正常处理FastCGI(这没有多大意义).我将很快安装Linux并报告任何进展.
我们正在为离线工作的iPhone构建Web应用程序.但是我们在缓存动态图像时遇到了困难.请继续阅读,我将通过示例的方式向我展示我的意思以及到目前为止我们所做的工作.
例如,假设我们正在构建一个只有1页的简单列表应用程序.应用程序的唯一目的是列出5个项目,每个项目包含一些文本和1个图像.
该应用程序有一个简单的徽标和一些单独的JavaScript和CSS代码.使用缓存清单文件缓存这些静态资源.
有2个场景:
场景1:我在线,我打开了Web应用程序
当我在Safari中加载列表应用程序时,它将从包含1000个项目的数据库中获取5个新的随机项.这些都是通过AJAX调用(JSON格式)通过简单的后端提供的.
包含5个项目的整个JSON对象将立即存储在HTML5本地存储中并缓存以供脱机使用.
JSON对象的结构有点像这样:
{
"0" : {
id: "3",
text: "Some text about item #3",
image_url: "http://www.domain.com/image22341.png"
},
"1" : {
id: "23",
text: "Some text about item #23",
image_url: "http://www.domain.com/image442321.png"
},
"2" : {
id: "4",
text: "Some text about item #4",
image_url: "http://www.domain.com/image2321.png"
},
"3" : {
id: "432",
text: "Some text about item #432",
image_url: "http://www.domain.com/image2441.png"
},
"4" : {
id: "43",
text: "Some text about item #43",
image_url: "http://www.domain.com/image221.png" …Run Code Online (Sandbox Code Playgroud)