jar文件的后台进程,如何在进程结束时异步通知我


background process of a jar file, how can i get asyncronously notified when process finishes?

场景:我有一个php流浪virtualbox服务器和一个需要几分钟才能运行的可运行jar。理想情况下,当用户转到我的应用程序中的某个路由时,服务器将开始在后台运行所述jar,这样用户就不必等待查看空白页面,并且,当jar完成执行时,页面将自动刷新(或其中的数据),向用户提供从jar输出中获得的信息。

问题:到目前为止,我已经使用exec()函数在后台运行了jar。我甚至可以获取进程id并检查它是否仍在运行。我遇到的问题是,当jar停止运行时,如何在不阻止正常执行的情况下通知php?有办法做到这一点吗?我到处搜索,从laravel队列到分叉运行过程,但没有什么(据我所知)适合我的需求。

编辑:我想我可能已经找到了解决方案,但无论如何我还是想问问社区。假设我在页面加载后使用javascript循环(带有setInterval),在循环中,我向服务器发出ajax异步请求,询问进程是否结束,如果结束,则返回jar的输出并用新数据更新网页。这将是一个非常"拉"的解决方案,而不是更可取的"推",但我甚至不知道推的方法是可能的。

我还在学习为网络应用程序编码,所以这可能是一个愚蠢的问题,对此我深表歉意。如果这个解决方案完全偏离轨道,请随时让我走上正确的道路。

提前感谢,

您应该看看已经为这种目的制作的JS库,例如:NodeJS。

它保持用户和Web服务器之间的管道畅通,您可以从服务器向特定用户或用户组发送通知。

我自己真的很喜欢。