2011-03-21 58 views
0

在我的CGI脚本中,我向另一台服务器发送很长(最多10秒)的请求,解析结果并向用户显示响应(通过AJAX)。但另一台服务器主人问我没有更多的执行每个请求超过每10秒钟,1个请求:如何模拟CGI脚本的队列?

  • 我要救我的 用户的每个请求;
  • 每十秒我只能向另一台服务器发出一个 请求;

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

克朗,但每分钟只运行一次,所以我的用户必须等待这么长的时间......

那么,如何可以通过CGI做到这一点?

可能是:

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

  3. 之后,它会保存导致 缓存文件。你怎么看?

可能是一些模块已经写入这样的任务?

回答

1

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