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

      

      

  • 相关阅读:
    【分布式事务】的一篇良心之作!
    如何保证缓存与数据库的数据一致性
    30多岁的大龄程序员,应该如何保持职场竞争力
    Kafka acks参数对消息持久化的影响
    Kafka 如何优化内存缓冲机制造成的频繁 GC 问题?
    Shell中的特殊符号(special characters)和含义
    Bash中的一些常用的数组相关的特殊语法(array syntax)
    一站式搞定Bash脚本的参数处理问题
    Bash脚本set命令教程
    Bash中的eval命令
  • 原文地址:https://www.cnblogs.com/wxb8/p/9943937.html
Copyright © 2011-2022 走看看