如何在PHP中发送响应后执行函数

时间:2017-01-18 08:30:38

标签: php concurrency request response

我试图在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);

我该怎么做?有什么想法吗?

2 个答案:

答案 0 :(得分:0)

PHP的并发模型很简单,并且基于以下事实:Web服务器可以同时执行多个PHP脚本。通常,你实现这个的方式是

  • 将回调函数的主体放在自己独立的脚本中;以及

  • 通过外发Web请求(使用cURL或类似内容)从父脚本调用它。

也就是说,让第一个PHP脚本请求第二个(可能是)同一Web服务器上的URL,就像用户在Web浏览器中按顺序打开这两个URL一样。这样,第二个脚本可以在第一个脚本完成响应并终止后继续运行。

如果第二个PHP脚本分别独立运行并且连续运行,则可能采用更复杂的方法,包括message queuesremote-procedure call机制,如XML-RPCApache 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>