超实用-----史上最简单最通用的和编程语言无关的定时任务,同时实现服务端推送技术

     作为一个后端工程师,经常性会遇到这样的需求:

     大哥,我们想给用户没事就发个消息,让它上来消个费啥的:大爷,今天有空吗?来玩啊?能不能搞?

      我们要对接第三方系统,但是对方有限制,一个小时只能请求人家一次,不能给人家服务器增加压力,你加压力就干你,能不能搞?

      以上这些操作,我们抛开编程语言,编程语言自带的能力不算,有没有一种和编程语言无关的通用的解决方案?

      我们都知道,服务端我们最常处理的需求是客户端主动发起访问,一般使用http请求,然后服务端对用户的请求进行处理,然后给出结果,这是最常见的处理方案,可是上门的需求反过来了:客户端并不请求,服务端主动给用户客户端发消息,反过来了,这可怎么搞?

     目前最常用的解决方案,就是所谓的定时任务,一般的话需要借助linux或者windows服务器的支持,通过编写crontab配置文件,然后定时启动一个什么操作,这个操作可以是你的程序文件,这当然需要系统的支持。具体可以参考下图。

     其实还是需要你自己写程序操作,然后配合linux系统写一个定时的操作,定时来执行你的程序脚本,这需要服务器的支持。

     那么我们怎么不借助服务器,写一个所有语言通用的呢?

     定时任务是什么?就是定时执行一个什么什么操作对吧?那我们就写一个操作啊,然后让它定时执行就好了啊!

     所以,思路就出来了啊,定时,自己执行自己,是不是这个道理?所以,多说无益,上代码:


$time=5;     //设置定时的时间间隔,比如定时5秒

$url="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

此处写你的操作代码,比如你要去请求一个接口,或者给用户发消息,完成你实际的工作。

//事情干完之后就歇一歇,比如你上面的定时5秒。

sleep($time);

//定时任务实现的核心操作,重新请求当前文件的url,再次执行当前文件,继续干活。

file_get_contents($url); 

       看到了吗?上面这简单的几行代码,我们只需要执行当前这个文件,就可以启动定时任务,是不是没看懂我们是怎么玩的?那我就再给你分析一下:

       代码核心思想:自己执行自己,简单吧?

       这个文件完成了一次任务,所谓定时任务,就是过了一个时间之后,继续再执行任务,我们写的这个文件它本身就是执行任务的,那就是到了时间之后再执行这个文件,是不是好理解了?也就是说,定时任务的核心思想:

      到了指定的时间,循环往复执行任务,我们的文件即是一次任务,那就是到时间继续执行我们的文件。

     所以最核心的就三行代码:

//拿到当前文件的url地址

$url="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

//设置一个定时的时间,比如过5秒再执行。

sleep($time);

//再次请求执行当前文件,即再次触发任务。

file_get_contents($url); 

完事了,就这么简单,我调我自己,过一会再跑一遍,这样不就实现定时任务了?

    你看到了,上面我们写的是很简单的,我们突破了浏览器30秒的限制,我们也不需要用户触发,我们只需要自行启动一遍这个脚本,这很简单,你可以再写一个总调用文件,然后这个文件就是触发所有的定时任务文件,你到时候只需要执行一次那个总调用文件,把所有的定时任务触发就好,它们就会自己去玩耍了,根本不需要你管。而且我们这样的是可以通用的,它跟编程语言无关,无非是实现了任务本身自己调自己,这所有的编程语言都可以实现,跟编程语言本身的特性毫无关系。

      同时自然实现的是,服务端推送技术,你定时文件执行后,你想怎么做还不是看你的需求?不管你是要给用户发消息,还是去请求第三方接口api?这不都实现了?

     但是我们发现了一个问题,这个任务启动之后,怎么停呢?你要是一旦启动不停,这个定时任务就会跑到地老天荒,除非你服务器关机,所以我们还需要想办法启动活着停止这个任务,有什么办法?很简单,我们加入控制文件config.php即可。


//加入控制文件,控制定时任务的开启和结束
$run = include './config.php';

if(!$run){
    die('定时任务已终止'); 
}


$time=5;     //设置5秒时间

$url="http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];

少年,战斗吧!完成你的任务去吧!

//本轮任务完成,休息,等待下一轮战斗开始

sleep($time);

//继续执行当前文件,启动下一轮战斗

file_get_contents($url); 

我们的config.php文件就是定时任务的控制文件,我们在其中加入了对所有定时任务的控制操作,通过01即可控制定时任务的开启和结束。

config.php文件可以如下

<?php 

//1开启定时任务,0关闭定时任务

/**
 * 通过 改变config.php 的 return 0 , 来实现停止程序. 一个可行的办法是config.php文件和某个特殊表单交互, 通过HTML页面设置一些变量来进行配置
 */
return 1; 

?>

      所以,这就完整了嘛,你可以做一个配置洁面,通过修改return 0或者return 1来控制定时任务的启动和关闭。

      至此,我们只用了简简单单的几行代码就实现了极其复杂的定时任务,而且这代码居然还和编程语言无关,你可以根据你的编程语言改写,核心思想就是任务本身调用自身,这任何一个编程语言都是具有的啊,和编程语言没啥关系。

       如果你关注服务器安全,毕竟你PHP写的网站或者程序很多时候还是要去服务器上运行的,那么服务器的安全就至关重要,如何避免黑客攻击?如何让服务器更加的安全可靠?那么你可以看看我写的四篇服务器安全文章。为了查找起来方便,也避免文章过长,我分了四篇,分别讲述centos系统安全,数据库MySQL安全、apache应用服务安全、tomcat安全。

      第一篇:服务器自身安全基线(即本文)

跟我学,你的服务器安全吗?第一篇----centos系统安全篇_zhumengyisheng的博客-CSDN博客你的服务器够安全吗?是否经常被黑客攻击?网站怎么又被黑了?这可怎么搞啊?本文主要为服务器的自身安全问题,主要为linux的系统安全问题,本文使用的是centos系统https://blog.csdn.net/zhumengyisheng/article/details/121866485     第二篇    数据库安全基线(mysql数据库)

跟我学,你的服务器安全吗?第二篇----数据库mysql安全篇_zhumengyisheng的博客-CSDN博客这是一篇非常值得收藏的文章,你的服务器会天天被黑客攻击吧?数据库又瘫痪了,数据库又被黑客入侵了,数据库怎么这么多事?怎么让数据库能安全些呢?急需指导,在线等,挺急的,再晚一会,老板都要破产了......https://blog.csdn.net/zhumengyisheng/article/details/121865391     第三篇     apache服务安全

跟我学,你的服务器安全吗?第三篇----apache安全篇_zhumengyisheng的博客-CSDN博客你的服务器是否安全?网站又被黑客入侵了?服务器又瘫痪了?怎么让服务器更安全些啊?本节主要讲述网站的基础服务apache如何配置更加安全?如果基础服务都被入侵了,你的网站又怎么可能运行正常?https://blog.csdn.net/zhumengyisheng/article/details/121866723    第四篇    tomcat服务安全

跟我学,你的服务器够安全吗?第四篇----tomcat安全篇_zhumengyisheng的博客-CSDN博客跟我学,你的服务器安全吗?是不是有黑客入侵啊?服务又瘫痪了?本节讲述互联网基础服务之一tomcat的安全配置问题和相关的漏洞恢复,一定要尽可能配置好,不要等事后攻击发生了追悔,言之晚矣https://blog.csdn.net/zhumengyisheng/article/details/121866907       当然,光说不练假把式,尤其是这种必须要上服务器实际干的东西,这一招一式都是要上服务器练的,所以你怎么着都得有个地方去尝试,那么是得买个服务器,大家现在一般都是用云服务器,我买最多的也是阿里云,腾讯云如果便宜的话也可以买,反正也不贵,买一个操练起来吧!你的网站也可以部署上去不是?你说域名备案是个问题?no no no,那根本不是问题,你要嫌备案麻烦,直接买个别人备案好的域名就行,直接在阿里云买备案过的那种就好了,再说你服务器也可以不需要域名,直接用ip不就好了,除非你真正想运营好一个网站,那才需要正规的流程走,其他的话都可以随意点,很简单。

        阿里云限量红包,速领。

云小站_专享特惠_云产品推荐-阿里云上云优惠聚集地,新人专享优惠价格,可叠加专享代金券购买价格更低。https://www.aliyun.com/minisite/goods?userCode=v6vhcyn8      腾讯云新用户专享红包

腾讯云优惠券_代金券_云服务器折扣券-腾讯云腾讯云优惠券,腾讯云代金券,腾讯云服务器折扣券https://cloud.tencent.com/act/vouchers/list?fromSource=gwzcw.2477393.2477393.2477393&utm_medium=cpc&utm_id=gwzcw.2477393.2477393.2477393&cps_key=b0c7af9380d6324294316347ba2c8a49     阿里云最新活动

最新活动_阿里云最新活动,阿里云最全的优惠聚集地https://www.aliyun.com/activity?userCode=v6vhcyn8     阿里云腾讯云所有优惠汇总

浅谈VPS云服务器(内含神秘大额专属特惠)_zhumengyisheng的博客-CSDN博客怎么做一个网站?都需要什么?要个服务器?要个域名?去哪里买?哪个好啊?有优惠吗?所有的优惠都在这里了,给自己建个网站吧,毕竟要学以致用啊!https://blog.csdn.net/zhumengyisheng/article/details/121391896      如果你还想学计算机,想入门学计算机,那么我也欢迎你去看看我写的计算机编程文章,不用担心你看不懂,那不存在,我的这几篇文章几乎不涉及专业术语,都是大白话,一般人都能看懂的,是正常人看的文章,不是给专业人士看的。

      

态度篇(这是我唯一希望你认知到的东西,你可以什么都忘了,但态度得端正。)

为什么985高校还是在上C语言?这难道不是大学教育的失败?

为什么现在985高校还是上C语言课?_zhumengyisheng的博客-CSDN博客现在工作它们不都在找java、PHP、golang之类的吗?可是为什么985大学了居然还在教学生古老的C++啊?这不是误人子弟?这难道不是大学教育的失败?https://blog.csdn.net/zhumengyisheng/article/details/121391642计算机那么好,为什么计算机专业出身的很多人毕业都转行不搞计算机了?

计算机那么好,为什么计算机专业出身的很多人毕业都转行不搞计算机了?_zhumengyisheng的博客-CSDN博客计算机那么好,为什么计算机专业出身的很多人毕业都转行不搞计算机了?为什么挤破头都抢不上的计算机专业,毕业工资那么高,分分钟年薪几十万,那他们为什么要转行呢?这里面到底有什么不为人知的秘密?到底是什么想不开让他们放弃了如此大好钱程前程?https://blog.csdn.net/zhumengyisheng/article/details/121391821

学习篇

编程语言第一课 入门 程序员的道与术

程序员的道与术_zhumengyisheng的博客-CSDN博客什么样的程序员才是好的程序员?程序开发学习到底是在学什么?你适合学习程序开发吗?编程语言众多,如果要学习我到底该学习哪一种?程序员的道与术,讲述那些不为你知的秘密https://blog.csdn.net/zhumengyisheng/article/details/121391210编程语言第二课 晋级 不忘初心 方得始终

不忘初心,方得始终_zhumengyisheng的博客-CSDN博客难道我们学习程序就是学一堆一堆的框架吗?难道学习程序就是学一堆一堆的套路?如果不是,那我们到底又该学什么?程序的本质又是什么?本文将给你答案https://blog.csdn.net/zhumengyisheng/article/details/121391458编程语言第三课 深入 想法也疯狂,创造一门语言

想法也疯狂--创造一门语言_zhumengyisheng的博客-CSDN博客开天辟地走一遭学了那么多语言,敢不敢挑战一次自己,创造一门语言?语言从来都不是天生的,它们都是人写出来的,既然别人能写,那你能不能写?如果要创造一门语言,那么到底该怎么创造?https://blog.csdn.net/zhumengyisheng/article/details/121391567

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值