java - 使用 exec 通过 PHP 运行 JAR 时避免 JVM 启动延迟

标签 java php jvm exec

有什么方法可以避免每次在 PHP 中运行 exec 命令时 JVM 启动造成的延迟吗?

我有两个用于加密和解密的 JAR,需要使用 PHP 运行。两者都在同一脚本上运行,尽管一个脚本解密 URL 参数,然后另一个脚本加密一些其他信息。当我通过命令行运行它们时,它们都在不到 0.4 秒的时间内完成。但是,当我使用 PHP exec 函数运行它们时,会启动一个新的 JVM 实例,这会使每个 JAR 执行时间增加 5 秒。

我已经研究过使用 Nailgun,但无法让它发挥作用。我找不到任何让它运行 JAR 的文档,而且当我使用类时,它也永远找不到它们。

我也考虑过使用 PHP/Java Bridge。不过,我更愿意继续使用 exec。我已经在运行 IIS 7.5,但我不确定如何配置桥接器来使用它。

我的问题是这样的:
有没有办法让 JVM 在后台运行,这样 PHP exec 函数就不需要每次启动一个新实例?我认为一定有办法,因为通过命令行没有延迟。

如果没有办法做到这一点,那么我愿意接受其他建议。运行 PHP 脚本 11 秒意味着该网站的访问者很可能会离开。

可能有用或可能没有用的其他信息:
它将在Windows Server 2008 R2 32位操作系统上运行。
仅需要本地访问。
使用IIS服务器7.5。
网站采用 PHP 编码。 PHP 版本是 5.3.5。
服务器正在运行最新的JRE - Java7 u6

最佳答案

Is there any way to keep the JVM running in the background in such a way that the PHP exec function does not need to start a new instance each time?

您可以在已知端口上启动 ServerSocket。

如果这是应用程序第一次运行,则这将成功并且该进程可以继续运行。

如果不成功,应用程序可以在该端口上打开一个套接字并根据需要发送命令并获取响应。

关于java - 使用 exec 通过 PHP 运行 JAR 时避免 JVM 启动延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12194133/

相关文章:

java - 基于微服务的架构和每个节点的单独缓存

java - 参数列表中的 "..."是什么意思? doInBackground(字符串...参数)

java - 试图了解包不存在错误

PHP - 相当于 PHP 中的 Python PDB(调试器)?

java - 集群环境下的Spring单例

eclipse - 硬关闭 Eclipse 后无法启动服务器(tomcat 服务器已经启动)

java - Xtext 手动向语法添加值

php - 如何使用 fscanf 读取整行(字符串)?

php - jquery ajax 分页与 php 问题

java - 在长 Scala 列表或 Stream 上进行 reduce() 操作期间,Java JVM 关于 GC 的智能程度如何?