zoukankan      html  css  js  c++  java
  • 创建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
        }
      ]
    }
    

      

      

  • 相关阅读:
    C++内存泄露的有效预防方法:谁使用,谁删除 (1.2)
    工作日志2014-08-28
    【2012.1.24更新】不要再在网上搜索eclipse的汉化包了!
    关于ActionContext.getContext()的使用方法心得
    Android开发(20)--RadioGroup的使用
    站点防止攻击
    小强的HTML5移动开发之路(50)——jquerymobile页面初始化过程
    我是怎样成长为系统架构师的
    辛星站点架构师笔记第四篇
    strcpy_s与strcpy的比較
  • 原文地址:https://www.cnblogs.com/wxb8/p/9943937.html
Copyright © 2011-2022 走看看