admin 管理员组文章数量: 887007
超实用
作为一个后端工程师,经常性会遇到这样的需求:
大哥,我们想给用户没事就发个消息,让它上来消个费啥的:大爷,今天有空吗?来玩啊?能不能搞?
我们要对接第三方系统,但是对方有限制,一个小时只能请求人家一次,不能给人家服务器增加压力,你加压力就干你,能不能搞?
以上这些操作,我们抛开编程语言,编程语言自带的能力不算,有没有一种和编程语言无关的通用的解决方案?
我们都知道,服务端我们最常处理的需求是客户端主动发起访问,一般使用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系统 第二篇 数据库安全基线(mysql数据库)
跟我学,你的服务器安全吗?第二篇----数据库mysql安全篇_zhumengyisheng的博客-CSDN博客这是一篇非常值得收藏的文章,你的服务器会天天被黑客攻击吧?数据库又瘫痪了,数据库又被黑客入侵了,数据库怎么这么多事?怎么让数据库能安全些呢?急需指导,在线等,挺急的,再晚一会,老板都要破产了...... 第三篇 apache服务安全
跟我学,你的服务器安全吗?第三篇----apache安全篇_zhumengyisheng的博客-CSDN博客你的服务器是否安全?网站又被黑客入侵了?服务器又瘫痪了?怎么让服务器更安全些啊?本节主要讲述网站的基础服务apache如何配置更加安全?如果基础服务都被入侵了,你的网站又怎么可能运行正常? 第四篇 tomcat服务安全
跟我学,你的服务器够安全吗?第四篇----tomcat安全篇_zhumengyisheng的博客-CSDN博客跟我学,你的服务器安全吗?是不是有黑客入侵啊?服务又瘫痪了?本节讲述互联网基础服务之一tomcat的安全配置问题和相关的漏洞恢复,一定要尽可能配置好,不要等事后攻击发生了追悔,言之晚矣 当然,光说不练假把式,尤其是这种必须要上服务器实际干的东西,这一招一式都是要上服务器练的,所以你怎么着都得有个地方去尝试,那么是得买个服务器,大家现在一般都是用云服务器,我买最多的也是阿里云,腾讯云如果便宜的话也可以买,反正也不贵,买一个操练起来吧!你的网站也可以部署上去不是?你说域名备案是个问题?no no no,那根本不是问题,你要嫌备案麻烦,直接买个别人备案好的域名就行,直接在阿里云买备案过的那种就好了,再说你服务器也可以不需要域名,直接用ip不就好了,除非你真正想运营好一个网站,那才需要正规的流程走,其他的话都可以随意点,很简单。
阿里云限量红包,速领。
云小站_专享特惠_云产品推荐-阿里云上云优惠聚集地,新人专享优惠价格,可叠加专享代金券购买价格更低。=v6vhcyn8 腾讯云新用户专享红包
腾讯云优惠券_代金券_云服务器折扣券-腾讯云腾讯云优惠券,腾讯云代金券,腾讯云服务器折扣券=gwzcw.2477393.2477393.2477393&utm_medium=cpc&utm_id=gwzcw.2477393.2477393.2477393&cps_key=b0c7af9380d6324294316347ba2c8a49 阿里云最新活动
最新活动_阿里云最新活动,阿里云最全的优惠聚集地=v6vhcyn8 阿里云腾讯云所有优惠汇总
浅谈VPS云服务器(内含神秘大额专属特惠)_zhumengyisheng的博客-CSDN博客怎么做一个网站?都需要什么?要个服务器?要个域名?去哪里买?哪个好啊?有优惠吗?所有的优惠都在这里了,给自己建个网站吧,毕竟要学以致用啊! 如果你还想学计算机,想入门学计算机,那么我也欢迎你去看看我写的计算机编程文章,不用担心你看不懂,那不存在,我的这几篇文章几乎不涉及专业术语,都是大白话,一般人都能看懂的,是正常人看的文章,不是给专业人士看的。
态度篇(这是我唯一希望你认知到的东西,你可以什么都忘了,但态度得端正。)
为什么985高校还是在上C语言?这难道不是大学教育的失败?
为什么现在985高校还是上C语言课?_zhumengyisheng的博客-CSDN博客现在工作它们不都在找java、PHP、golang之类的吗?可是为什么985大学了居然还在教学生古老的C++啊?这不是误人子弟?这难道不是大学教育的失败?,为什么计算机专业出身的很多人毕业都转行不搞计算机了?
计算机那么好,为什么计算机专业出身的很多人毕业都转行不搞计算机了?_zhumengyisheng的博客-CSDN博客计算机那么好,为什么计算机专业出身的很多人毕业都转行不搞计算机了?为什么挤破头都抢不上的计算机专业,毕业工资那么高,分分钟年薪几十万,那他们为什么要转行呢?这里面到底有什么不为人知的秘密?到底是什么想不开让他们放弃了如此大好钱程前程?
学习篇
编程语言第一课 入门 程序员的道与术
程序员的道与术_zhumengyisheng的博客-CSDN博客什么样的程序员才是好的程序员?程序开发学习到底是在学什么?你适合学习程序开发吗?编程语言众多,如果要学习我到底该学习哪一种?程序员的道与术,讲述那些不为你知的秘密 晋级 不忘初心 方得始终
不忘初心,方得始终_zhumengyisheng的博客-CSDN博客难道我们学习程序就是学一堆一堆的框架吗?难道学习程序就是学一堆一堆的套路?如果不是,那我们到底又该学什么?程序的本质又是什么?本文将给你答案 深入 想法也疯狂,创造一门语言
想法也疯狂--创造一门语言_zhumengyisheng的博客-CSDN博客开天辟地走一遭学了那么多语言,敢不敢挑战一次自己,创造一门语言?语言从来都不是天生的,它们都是人写出来的,既然别人能写,那你能不能写?如果要创造一门语言,那么到底该怎么创造?
本文标签: 超实用
版权声明:本文标题:超实用 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1732351912h1533321.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论