2011-03-21 68 views
0

在我的CGI腳本中,我向另一臺服務器發送很長(最多10秒)的請求,解析結果並向用戶顯示響應(通過AJAX)。但另一臺服務器主人問我沒有更多的執行每個請求超過每10秒鐘,1個請求:如何模擬CGI腳本的隊列?

  • 我要救我的 用戶的每個請求;
  • 每十秒我只能向另一臺服務器發出一個 請求;

首先我想一下將打開簡單文本文件(隊列文件)的Cron,讀取第一行並將其作爲請求發送到另一個服務器。之後,它會將結果保存在另一個文件中(我將緩存所有結果)。因此,我的CGI將首先檢查緩存文件並嘗試在其中查找結果,然後(如果未找到結果)它將將任務保存在隊列文件中(對於Cron)。

克朗,但每分鐘只運行一次,所以我的用戶必須等待這麼長的時間......

那麼,如何可以通過CGI做到這一點?

可能是:

  1. 檢查緩存文件CGI將 估計的時間來完成請求 後(通過讀取當前隊列文件)和 發送此估計時間到 HTML(我在哪裏可以得到這個時間和 通過AJAX在此時間之後發出另一個請求 )。
  2. 之後它將請求保存到 的隊列文件和分支。分叉 進程將等待,直到它的 請求將在 隊列的頂部,並會要求 另一臺服務器。

  3. 之後,它會保存導致 緩存文件。你怎麼看?

可能是一些模塊已經寫入這樣的任務?

回答

1

一種選擇是創建處理髮送到遠程服務器的所有請求本地守護程序/服務(Linux/Windows的)。除了專用端口/套接字外,您的Web服務可以使用相同的協議而不是遠程服務與此守護程序通信。守護進程可以接受來自Web服務器/應用程序的請求,並每十秒鐘,如果有未處理的請求可以發送到遠程服務器,當有響應時,它可以轉發回傳入的請求插座。您可以將此守護程序看作代理服務器,它只是增加了排隊功能。請注意,守護進程實際上不必解析傳入請求或返回結果;它只是將這些位轉發到目的地。它只需要實現排隊和網絡功能。