我希望这个问题不会因为标题而被标记,这是一个恰好涵盖广泛可能性的特定问题。
我正在执行批处理操作,该操作解析文件并通过套接字接口执行事务,接收响应,记录并继续执行批处理中的下一个操作。前端使用ExtJS 3.2.1作为框架,设置PHP代理来处理来自客户端的请求。
这一切都正常,但单个批处理文件可能包含1,000个操作,每个操作大约需要2秒钟完成(包括预先计算然后打印标签)。通过套接字处理此问题的系统无法对批处理中包含的操作进行排队,因此我不得不一次执行这些操作;即发送请求,得到响应然后继续下一个。这些可能需要相当长的时间才能完成,各种浏览器如何在XHR请求上处理这么长的执行时间,即使PHP中的max_execution_time
设置正确?更糟糕的是,还需要能够让脚本停止并等待您在打印预设数量的标签后更改打印机上的卷筒。
这意味着,与我的UI在同一层上的某些内容必须一次处理一个批处理操作,以便我可以通知用户更改卷,并且用户可以通知应用程序卷已更改。所以,关于问题。
我尝试将批处理操作加载到ExtJS GridView中,但是当我超过大约900个项目时,DataView会失败。我计划使用javascript迭代GridView并一次处理这些,记录响应并计算执行的打印操作数。实际上并不需要DataView,只要我可以存储正确数量的JSON数据并一次迭代一次就可以了。这有很多处理,WebWorker是否适合这个?
此外,所有这些都在LAN上运行(包括套接字连接),因此我也可以选择创建COM对象并将其公开给PHP。然后,我可以让用户“上传”批处理文件,并通过PHP将COM对象指向该文件,然后让它处理所有内容。但是,如何通知用户批次执行的状态?这一切甚至可能吗?
我是否过于谨慎,我是否可以在运行批处理的脚本上设置max_execution_time,并使用数据库将批处理流程与另一个脚本一起存储,以便每隔x
秒状态轮询状态?各个浏览器在什么时候决定脚本运行时间太长?
就像我说的那样,这是所有局域网,并且不会在每个服务器(通常是两个)超过5个工作站的任何地方部署,其中只有一个将在任何给定时间执行批处理操作。所以服务器压力不是一个大问题。
我知道这个问题已经完全被引出并且有点像“最佳实践”的问题,但除此之外我无处可去问,网上最聪明的家伙。无论如何我欣赏所有的答案/评论,因为我有点卡在这里从哪里去。任何语言都可以使用,只要我可以通过我的HTML / Javascript前端公开它。我精通php,perl,c / c ++,vb,asp,javascript我只是想弄清楚要处理这个问题的方法。
由于