【问题标题】:Best way to execute perl script from java application从 java 应用程序执行 perl 脚本的最佳方法
【发布时间】:2018-03-12 10:26:28
【问题描述】:

目前从我们的前端 java web 应用程序中,我们使用 cgi 脚本来触发 perl 脚本以对后端数据存储执行任何操作。但是当用户执行多个操作时它非常慢。有什么方法可以并行执行?

我可以同时发送多个 cgi 来实现这一点,但浏览器一次只允许 6 个活动连接到服务器。

【问题讨论】:

  • 你不应该这样做。将该 CGI 脚本重写为 Java。它在管理数据库方面非常出色。扔掉那个旧代码。
  • 感谢 duffymo 的建议,我们所有的后端 API 访问都是用 perl 编写的。
  • 愚蠢的。 Java 将扩展; Perl 不会。 cgi 对每个请求都需要一个新进程。 Java 解决方案将使用每个请求的轻量级线程。只要您没有长时间运行的进程阻塞事件总线,您就会对 netty 的扩展方式感到惊讶。立即进行切换 - 您永远不会再要求了。

标签: java perl cgi


【解决方案1】:

正如@duffymo 指出的那样,尝试同时推送过多的 cgi 调用并不是一个好主意。但也许您不希望您的 Java 客户端直接访问数据库。试图回答你的问题,我想说你有几个行动方案。

一个是尝试使 perl CGI 代码更快。您是否考虑过使用 Fast CGI 或类似的东西?它通常不需要过多地更改 perl CGI,您将获得更快的响应时间。例如CGI::Fast,只需对您的 CGI 程序稍作改动:

while (new CGI::Fast) {

  <Your previous CGI code goes here>

}

它的作用是让一个或多个 perl 进程等待 http 客户端,因此请求的处理速度要快得多。它需要在服务器端进行一些配置。

另一种方法是mod_perl。还有其他选择。所有这些都需要对您的 perl 代码进行一些更改,并在服务器端进行一些配置(可能是模块安装)。

另一种方法可能是创建一个新的 Web 服务(使用 perl 或您认为有信心的任何其他语言)并将客户端请求组合在一起。这样做,您只需一个请求即可获得对旧版 perl 脚本的多次调用。

主网络服务将接受一个包含许多请求的宏请求,并根据需要调用 perl 脚本。

【讨论】:

  • 谢谢哈维尔,我会检查 mod_perl 和 CGI​​::Fast 模块。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多