2009-04-10 50 views
1

我們有一個客戶端應用程序,允許用戶下載全長192Kb/s的MP3音頻文件。因爲文件存儲在外部給我們作爲一個企業,我們需要能夠:用於設置音頻文件緩存的最佳技術

1)複製從外部位置的文件到本地服務器的緩存

2)文件複製到請求它的客戶端

很明顯,對同一個文件的進一步請求將來自緩存並且不需要去外部。

現在,我們已經有了一個當前的系統(使用Squid Cache),但是問題是2只會在1完全完成時執行。這意味着如果一個10分鐘長的192kb/s磁道需要75秒才能從外部位置拷貝到緩存中,客戶端的HTTP超時會在60秒左右開始!這不符合我們的要求。

看來,我們需要的是一個緩存,可以傳輸到客戶端,而它是從外部位置獲取數據。我的問題是:

1)這可以做一個Squid緩存(這是傳統的老牌,而不是我的選擇)? 2)如果不是,哪種技術最適合這種情況(成本並不是真正的問題)?

請讓我知道,如果這不是明確的任何方式!

回答

1

這裏是一個asp.net處理程序,我寫了一段時間來代替另一臺服務器的某些東西。第二次寫文件和使用這個文件並不難。刷新循環中的響應將使其在下載時交付:

namespace bla.com 
{ 
    /// <summary> 
    /// Summary description for $codebehindclassname$ 
    /// </summary> 
    [WebService(Namespace = "http://tempuri.org/")] 
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] 
    public class Proxy : IHttpHandler 
    { 
     private static Regex urlRegex=new Regex(@"http://some_regex_here_to_prevent_abuse_of_proxy.mp3",RegexOptions.Compiled); 
     public void ProcessRequest(HttpContext context) 
     { 
      var targetUrl = context.Request.QueryString["url"]; 
      MatchCollection matches = urlRegex.Matches(targetUrl); 

      if (matches.Count != 1 || matches[0].Value != targetUrl) 
      { 
       context.Response.StatusCode = 403; 
       context.Response.ContentType = "text/plain"; 
       context.Response.Write("Forbidden"); 
       return; 
      } 

      HttpWebRequest req = (HttpWebRequest) WebRequest.Create(targetUrl); 
      Stream responseStream; 
      using (HttpWebResponse response = (HttpWebResponse)req.GetResponse()) 
      { 
       responseStream = response.GetResponseStream(); 
       context.Response.ContentType = response.ContentType; 

       byte[] buffer = new byte[4096]; 
       int amt; 
       while ((amt = responseStream.Read(buffer, 0, 4096))>0) 
       { 

        context.Response.OutputStream.Write(buffer, 0, amt); 
        Debug.WriteLine(amt); 
       } 
       responseStream.Close(); 
       response.Close(); 
      } 
      context.Response.Flush(); 
     } 

     public bool IsReusable 
     { 
      get 
      { 
       return false; 
      } 
     } 
    } 
} 
+0

您還可以增加超時的長度,以允許更大的文件。 – 2009-05-31 04:47:09