如何跨Perl CGI脚本进行通信?

如何跨Perl CGI脚本进行通信?,perl,cgi,webserver,communication,Perl,Cgi,Webserver,Communication,我正在寻找跨两个Perl的有效通信方式 脚本。我有两个剧本;脚本1生成一些数据。我想要我的 脚本2,以便能够访问该信息 最简单/最愚蠢的 方法是将脚本1生成的数据作为文件写入并读取 稍后使用脚本2。还有别的办法吗?我能去商店吗 将数据存储在内存中,并使其可用于脚本2(当然是 我的Linux支持吗?通过脚本1和make表示malloc一些数据 脚本2无法访问它 无法保证脚本2将在脚本1之后运行。所以 应该有办法使用看门狗定时器释放内存 让我透露更多的情况。我正在使用CGI Perl在web服务器上

我正在寻找跨两个Perl的有效通信方式 脚本。我有两个剧本;脚本1生成一些数据。我想要我的 脚本2,以便能够访问该信息

最简单/最愚蠢的 方法是将脚本1生成的数据作为文件写入并读取 稍后使用脚本2。还有别的办法吗?我能去商店吗 将数据存储在内存中,并使其可用于脚本2(当然是 我的Linux支持吗?通过脚本1和make表示malloc一些数据 脚本2无法访问它

无法保证脚本2将在脚本1之后运行。所以 应该有办法使用看门狗定时器释放内存


让我透露更多的情况。我正在使用CGI Perl在web服务器上运行这些脚本。因此,点击一个按钮,脚本1就会运行,并生成一个html网页。现在,用户可以将一些输入添加到此生成的网页,并单击此新网页上的按钮。现在,脚本2应该能够读取新网页上的数据。我可以再次将数据发布回web服务器,但更有效的方法是在服务器中保留生成网页的副本,并使其可供脚本2使用。现在,我希望避免将生成的页面写为文件。我正在考虑将其存储在内存中

这在某种程度上取决于您的使用情况。。。一大组数据?许多小消息?你对数据持久性有什么看法?它是完全异步的吗

其中一些选择是:

  • 对于性能最好的网站以外的任何网站,最好的方法是将我们的HTML页面写入文件。除非intrer进程通信被标杆为性能瓶颈,否则不要同时使用任何非文件解决方案(共享内存、缓存、中间服务器)

  • 特别是对于同一服务器上的两个CGI脚本,如果您在mod_perl或其他在两个CGI进程之间共享perl解释器的安排下运行它们,您可以开发一个包作为缓存,只要mod_perl正在运行,mod_perl就会将它及其包级别变量保存在内存中,因此编写器CGI进程和读取器CGI进程可以使用它进行通信。当然,需要考虑与读写器相关的常见同步/死锁和持久性问题

    或者,使用Apache::Session会话存储会话间数据

  • 正如您所指出的,共享内存。例如,使用IPC::Cache或

    另外,请查看O'Reilly的“Perl Cookbook”中的第16章配方12“在不同过程中共享变量”(没有链接,因为我知道的任何地方都没有非盗版版本在线)

  • 使用永久介质。文件是一种选择。数据库是另一种

  • 对于异步,使用一个中间消息传递系统(MQ、Tibco或更轻量级的东西)。在这种情况下可能有点过火,但这是一个需要注意的有效选项。这一款很可能非常稳定、坚固、可选择,但可能不是免费的,也不太灵活/定制

  • 或者推出您自己的简单消息系统服务器——对于您似乎需要的非常简单的服务器来说,这并没有那么复杂

    在一个端口上侦听来自第一个进程的请求以存储数据,在另一个端口上侦听来自使用者进程的请求以向您发送该数据,将数据存储在内存中的存储区域中,并在数据过期时使用警报或单独的监视程序(子进程)将其清除


您已将问题标记为“cgi”。它们都是CGI程序吗?在这种情况下,他们可以通过发出HTTP请求来相互交谈

然而,你必须告诉我们更多关于你为什么要这么做,以及你需要为我们完成什么来帮助你。Perl程序以某种方式相互通信当然很容易,但这并不意味着它是适合您的正确答案


当您对CGI程序之间的交互有着复杂的需求时,您可能希望使用一个web框架来处理这些细节。也许你想从哪里开始。甚至有一本书是这样写的。

知道你想做什么可能会有所帮助。是的,它们是完全异步的。数据量相当大。这不是很多小消息。它们是“罕见的大消息”。请澄清您的问题。不要在评论中隐藏这些信息。有了适当的模板和会话管理,你不需要做任何事情。“有了适当的模板和会话管理”,你能解释一下吗?或者在我能读到的地方。这是我第一次编写CGI Perl应用程序。有很多书,等等。这是一个大课题。谷歌很好。听起来您可能需要一个web框架,比如Catalyst。