Bas*_*sic 4 php asynchronous http
情景如下:
调用指定的URL(包括Id
已知的URL)SearchDefinition
应Search
在db中创建新记录并返回新记录Search.Id
.
在返回之前Id
,我需要生成一个新进程/启动一个PHP文件的异步执行,该文件接收新的Search.Id
并进行搜索.
然后,用户界面轮询第3个PHP脚本以获取搜索状态(第2个脚本不断更新Db中的搜索记录).
这给我一个以异步方式生成第二个PHP脚本的问题.
我将在第三方服务器上运行它,因此几乎无法控制权限.因此,我宁愿避免新的搜索记录的cron作业/类似的轮询(如果我可以避免它,我真的不喜欢轮询).我不是非常喜欢使用Web服务器进行与Web无关的工作,但为了避免可能需要的权限问题.
这似乎给我留下了两个选择:
我不确定如何完成上述任何一项.第一个仍然感觉很讨厌.
如果有必要使用CURL或类似的假冒网络电话,我会这样做,但我希望有一种方便的多线程方法,我只是产生一个新的线程,并将其指向适当的功能,权限将是继承自调用者(即Web服务器用户).
我宁愿使用选项1.这也会使相关功能彼此更加接近.这是一个提示如何向用户发送内容然后关闭连接并继续执行:
(由tom *********
在gmail dot com,来源:http://www.php.net/manual/en/features.connection-handling.php#93441)
<?php
ob_end_clean();
header("Connection: close\r\n");
header("Content-Encoding: none\r\n");
ignore_user_abort(true); // optional
ob_start();
echo ('Text user will see');
$size = ob_get_length();
header("Content-Length: $size");
ob_end_flush(); // Strange behaviour, will not work
flush(); // Unless both are called !
ob_end_clean();
//do processing here
sleep(5);
echo('Text user will never see');
//do some processing
?>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1495 次 |
最近记录: |