方案: 我有一个php vagrant虚拟机服务器和一个可运行的jar,需要几分钟才能运行。 理想情况下,当用户在我的应用程序中转到某个路径时,服务器将开始在后台运行所述jar,这样用户就不必等待查看空白页面,并且当jar完成执行时,页面将自动刷新(或其中的数据)向用户提供从jar输出中获得的信息。
问题: 到目前为止,我设法使用exec()函数在后台运行jar。我甚至可以获取进程ID并检查它是否仍在运行。 我遇到的问题是,当jar停止运行而不阻止正常执行时,如何通知php(按照说)? 有没有办法做到这一点?我已经从laravel队列到处搜索到了正在运行的过程,但没有(据我所知)适合我的需要。
编辑: 我想我可能已经找到了解决方案,但无论如何我想问社区。假设我在页面加载后使用javascript循环(使用setInterval),并且在循环内部,我向服务器发出ajax异步请求,询问进程是否已经结束,如果是,则返回jar的输出,使用新数据更新网页。 这将使得#"拉动"解决方案而不是更好的推动"但我甚至不知道推送方法是否可行。
我还在学习为网络应用编写代码,所以这可能是一个愚蠢的问题,为此我道歉。如果这个解决方案完全脱离了轨道,请随时让我走上正确的道路。
提前致谢,
答案 0 :(得分:0)
你应该看看为此目的已经制作的JS库,例如:NodeJS。
它在用户和您的网络服务器之间保持管道打开,您可以从服务器向特定用户或一组用户发送通知。
真的很喜欢它。