我试图在php中发送响应后执行回调函数。 例如在JAVA中,我使用Threads。但是在响应后的php中它完成了脚本的过程。除此之外,我尝试实现pthreads,但它太复杂了。
在我的代码中:
if(isset($_REQUEST['x']) && $_REQUEST['x'] == "x") {
header('Content-type: application/json');
$data = json_decode(file_get_contents('php://input'), TRUE);
if (!empty($data)) {
$request = new XRequest($data['params']);
$customParams = unserialize(file_get_contents('customParams'));
$customParams->callCallback($request); //Calling from another PHP class
echo(json_encode(array('status' => 'OK')));
}
}
请求来自不同的服务器。我想在响应发送时首先启动php echo响应,我想调用$customParams->callCallback($request);
我该怎么做?有什么想法吗?
答案 0 :(得分:0)
PHP的并发模型很简单,并且基于以下事实:Web服务器可以同时执行多个PHP脚本。通常,你实现这个的方式是
将回调函数的主体放在自己独立的脚本中;以及
通过外发Web请求(使用cURL或类似内容)从父脚本调用它。
也就是说,让第一个PHP脚本请求第二个(可能是)同一Web服务器上的URL,就像用户在Web浏览器中按顺序打开这两个URL一样。这样,第二个脚本可以在第一个脚本完成响应并终止后继续运行。
如果第二个PHP脚本分别独立运行并且连续运行,则可能采用更复杂的方法,包括message queues或remote-procedure call机制,如XML-RPC和Apache Thrift处理。但我认为这对你想要做的事情已经足够了。
答案 1 :(得分:0)
在php中我使用底部代码解决了我的问题。但请注意fastcgi_finish_request。没有这个,我的服务器无法停止第一个响应并开始回调。
感谢。
<form name="inputform" id="inputform" onsubmit="return check()" action="">
<input id="nem" name="nem">
<input id="nef" name="nef">
<input id="rem" name="rem">
<input id="ref" name="ref">
<input id="ea" name="ea">
<input id="ver" name="ver">
<input id="kavm" name="kavm">
<input id="kavf" name="kavf">
<input type="submit" onclick="return check()" />
</form>