如何为CGI脚本模拟队列?

时间:2011-03-21 12:45:18

标签: perl cgi queue

在我的CGI脚本中,我向另一台服务器发出长(最多10秒)请求,解析结果并向我的用户显示响应(通过AJAX)。但是另一个服务器所有者要求我每10秒执行一次请求不超过1次,所以:

  • 我需要保存我的每个请求 用户;
  • 每十秒我只能做一个 请求到另一台服务器;

首先我想一下Cron将打开简单文本文件(队列文件),读取第一行并将其作为请求发送到另一台服务器。之后,它会将结果保存在另一个文件中(我将缓存所有结果)。所以我的CGI将首先检查缓存文件并尝试在其中找到结果,然后(如果找不到结果)它将在队列文件中保存任务(对于C​​ron)。

但是Cron每分钟只运行一次,所以我的用户必须等待很长时间......

那我怎么能通过CGI做到这一点?

可能是:

  1. 检查缓存文件后CGI会 估计完成请求的时间 (通过读取当前队列文件)和 将此估计时间发送给 HTML(我可以得到这个时间和 在此之后提出另一个请求 通过AJAX)。
  2. 之后会将请求保存到 队列文件和fork。分叉 过程将等待直到它 请求将在顶部 队列并将发出请求 另一台服务器。

  3. 之后会保存结果 缓存文件。你怎么想?

  4. 可能已经为这些任务编写了一些模块吗?

1 个答案:

答案 0 :(得分:1)

一种选择是创建一个本地守护程序/服务(Linux / Windows),用于处理向远程服务器发送所有请求。除了在专用端口/套接字上之外,您的Web服务可以使用相同的协议与此守护程序而不是远程服务进行通信。守护程序可以接受来自Web服务器/应用程序的请求,并且每十秒钟一次,如果有待处理的请求,它可以将其发送到远程服务器,并且当有响应时,它可以将其转发回传入的请求套接字。您可以将此守护程序视为仅添加排队功能的代理服务器。请注意,守护进程实际上不必解析传入请求或返回结果;它只是在每种情况下将位转发到目的地。它只需要实现排队和网络功能。