创建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
    }
  ]
}

  

 

 

 

  

posted @ 2018-11-11 22:20  Monns  阅读(417)  评论(0编辑  收藏  举报