页面确实需要加载速度很快,但数据库速度很慢,所以我们将它分成两个数据库调用,一个更快,一个更慢,第一个更快,我们可以为页面的一部分提供相当的服务可以自己使用。如何在没有mecache的情况下并行请求PHP?
但是,我们希望第二个请求关闭,并且我们知道每当第一个请求关闭时总会有必要做。所以现在页面的第一部分包含一个脚本,它触发http请求,然后我们进行数据库调用并最终加载。
但这是一个串行操作,这意味着页面加载的第一部分需要完成它的数据库,返回http,在浏览器中渲染,运行脚本,请求http然后等待数据库并最终返回给我们整个页。
你如何解决在PHP中解决这个问题?我们没有memcache,我查看了fifo,但是我们也没有posix_mkfifo函数。
我想在第一个请求上做两个数据库调用,服务第一个请求和页面的一部分,让第二个数据库调用继续运行,当它完成时我想将它保存在/ tmp /或缓冲区或任何地方快速的内存 - 当脚本要求它时 - 也许脚本http req需要等待一些,也许它的幸运,并且会从内存中获得它。
但是,在内存中,你是否保存它,跨请求和php实例?不在全局中,不在会话中,不在memcached中。哪里?套接字?我应该叉和管?
编辑:谢谢大家。我去了两个异步HTTP请求路线。
是什么阻止你发起第二个http请求和第一个请求? – Marek
这不会是最有效的,这意味着1个http请求获取触发2个请求的脚本。咩。这将是一个典型的PHP“解决方案”。丑陋的黑客。 – rapadura
你没有太多空间可以搬到这里。首先,即使你可以fork或者线程 - 你仍然会收到一个请求,你不能对这个请求执行两个回复,除非你要求数据两次。如果您决定将快速和慢速数据库处理分成两个请求 - 您现在处于JS的领域(因为没有其他方法可以解决这个问题)。第一个请求呈现页面,第二个请求会对数据库做出魔术般的变化,并且可以等到数据到达时再发送,如果到达的话。这给了你可靠性(你会知道你成功或失败)。基本上,这是Beniamin在他的回答中提出的建议。 –