让我先说这个问题,说我对构建处理器密集型Web应用程序的设计相对较新。我有一个基于LAMP堆栈的功能应用程序,现在我正处于开发阶段,我必须实现扩展。
我有一个运行PHP代码的Web服务器ssh进入远程Windows机器以执行批处理过程,根据并发性可能需要大约15到45秒才能完成。我正在使用phpseclib pear library package提供的SSH2实现登录到远程计算机以使用Sysinternals' PsExec启动批处理文件。 PHP代码看起来像这样:
$remoteCommand = 'psexec -u username -p password -h cmd /C "C:\\automate_process.bat >> automate_process.log 2>>&1"';
$ssh_connection->exec($remoteCommand);
这实际上是从托管php代码的Web服务器调用远程Windows机器上的automate_process.bat。但是,automate_process.bat文件需要一段时间才能执行,如果有并发用户,有时会导致Web服务器的PHP超时。增加php.ini中的max_execution_time值并不能解决问题。
使用PsExec,-d开关不会等待automate_process.bat完成,并且将允许PHP脚本继续而无需等待。因此,在max_execution_time前面解决了问题,但出现了另一个问题:通知最终用户的浏览器automatic_process已完成。如何以有效的方式完成?看似需要的是应用程序代码中的体系结构更改。
起初我认为某种民意调查会起作用 - 也许是长期民意调查?我只想ping远程Windows机器以查看进程是否完整。但我读到的所有内容都表明,长轮询是Apache的一个严重负担,而远程Windows机器正在运行。此外,Web上的大量写作都指向Node.js作为解决方案。这真的是解决这类问题的方法吗?我是否必须学习一个新的框架,以便在应用程序扩展时使此操作更加强大?我很好,但我想知道我是否可以混合使用PHP和Node.js。如果是这样,有人可以提供一个简单的例子让我开始吗?
谢谢!
如果觉得《ajax加载时间长 如何最好地处理需要很长时间才能完成的ajax请求?》对你有帮助,请点赞、收藏,并留下你的观点哦!