1. 程式人生 > >建立Windows service使用FluentScheduler定時重新整理網頁

建立Windows service使用FluentScheduler定時重新整理網頁

我們都知道iis的程式池預設的閒置回收時間是20分鐘,

如果是自己的伺服器,我們可以設定成0,閒置不回收。

這樣網站就不會出現每隔20分鐘沒有訪客訪問就出現開啟非常慢的情況。

但是,如果個別網站不是用自己的伺服器,只是買了一個虛擬空間,空間商不給我們設定這個請求,那就比較麻煩了。。每隔20分鐘就要忍受網站的龜速,難道就沒有解決辦法了嗎?當然有!

我們可以建立一個Windows服務,放到我們自己的伺服器上,每隔十幾分鍾,定時重新整理放在虛擬空間上的網站,這樣就解決了上述問題!

1、建立windwos服務

這裡說的很明白了,就不再闡述,https://www.cnblogs.com/mq0036/p/7875864.html

2、只貼一下服務使用FluentScheduler定時器自動重新整理網頁的程式碼

protected override void OnStart(string[] args)
        {
            writeLog("服務啟動");
            writeLog("開始重新整理網頁");

            if (File.Exists(configfile))
            {
                var jsonStr = File.ReadAllText(configfile);
                var sites = JsonConvert.DeserializeObject<dynamic>(jsonStr);
                
                foreach (var item in sites.site)
                {
                    string url = item.url;
                    int time = item.time;                    
                    Registry registry = new Registry();
                    registry.Schedule(async ()=> { await GetHtmlAsync(url, time); }).WithName(url).ToRunNow().AndEvery(time).Minutes();
                    JobManager.Initialize(registry);
                }
            }
        }
        
        private async Task GetHtmlAsync(string url,int time)
        {
            Stopwatch sw = new Stopwatch();
            sw.Start();
            var http = new HttpClient();
            http.DefaultRequestHeaders.Add("User-Agent", "ozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36");
            var response = await http.GetAsync(url);
            if (response.IsSuccessStatusCode)
            {
                sw.Stop();
                writeLog($"已重新整理 {url},狀態碼:{response.StatusCode}, 耗時{sw.Elapsed.TotalMilliseconds}毫秒, {time}分鐘後繼續執行重新整理!");
            }
            else
            {
                writeLog($"重新整理失敗,發生未知錯誤!{response.StatusCode}");
            }            
        }

        protected void writeLog(string str)
        {
            using (FileStream stream = new FileStream(filePath, FileMode.Append))
            using (StreamWriter writer = new StreamWriter(stream))
            {
                writer.WriteLine($"{DateTime.Now} - {str}");
            }
        }

2、站點配置檔案的程式碼

{
  "site": [
    {
      "url": "https://www.baidu.com",
      "time": 19
    },
    {
      "url": "https://www.cnblogs.com",
      "time": 18
    }
  ]
}