如何在PHP / Windows中异步任务结束时通知用户
考虑下图:
思念 >用户可以执行单个文件/批量上传(我知道HTTP规范),批量我的意思是有人在视觉上能够一次发送多个文件. 问题 >那么客户端 – 服务器通信的哪种方法最适合从这些子进程发送回客户端的通知? 笔记 我得知道我正在使用Windows操作系统(Windows Server 2008)和XAMPP
用户上传图像.完成此步骤后,您可以创建一个任务. One Taks是数据库中任务表的一行.
class Task { const STATUS_PENDING = 'pending' const STATUS_ERROR = 'error' const STATUS_FINISHED = 'finished' private $userid; private $taskData = array(); public function run() { // create process } public function update() { // update the status an other changes you need to the database // or any other storage you use. } public function getStatus(); } class TaskManager { const MAX_TASKS = 5; private $tasks = array(); public function addTaks(); public function start() { foreach ($tasks as $task) { $task->run(); } } } 在服务器端,您需要考虑如何工作/组织您的任务.这取决于您的需求.借助TaskManager的强大功能,您可以 客户端现在可以轻松地向用户ID询问任务表以检查待处理任务.如果状态完成或错误,您可以给用户 这是一个简单的轮询示例. setInterval(function(){ $.ajax({ url: "server",success: function(data){ //Update your dashboard gauge salesGauge.setValue(data.value); },dataType: "json"}); },30000); proc_open只有在你有一些高级选项时才有用.具有proc_open的功能(关注管道)并与stream_set_blocking结合使用. 这是一个非阻塞的例子. class Task { private $process = null; private $pipes = array(); private $status = 'pending' public function run() { $descriptor = array ( 0 => array("pipe","r"),1 => array("pipe","w"),2 => array("pipe","w") ); $cmd = "/path/to/progam --with --some-arguments" $this->process = proc_open($command,$descriptor,$this->pipes); stream_set_blocking($this->pipes[1],0); } public function close() { foreach($this->pipes as $pipe) { fclose($pipe); } $exitStatus = proc_close($this->process); $this->process = NULL; return $exitStatus; } } 我希望这会给你一些解决问题的灵感. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |