关于PHP利用udp协议实现定时任务脚本
Posted MI米唐
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于PHP利用udp协议实现定时任务脚本相关的知识,希望对你有一定的参考价值。
1.创建一个简单的udp服务器(server.php)
<?php
//服务器信息
$server= 'udp://127.0.0.1:9998';
//消息结束符号
$msg_eof= " ";
$socket= stream_socket_server($server,$errno, $errstr,STREAM_SERVER_BIND);
if(!$socket) {
die("$errstr($errno)");
}
do{
//接收客户端发来的信息
$inMsg= stream_socket_recvfrom($socket,1024, 0, $peer);
//服务端打印出相关信息
echo"cut : {$inMsg}";
//给客户端发送信息
$outMsg= substr($inMsg, 0, (strrpos($inMsg,$msg_eof))).' -- '.date("D M j H:i:s Y ");
stream_socket_sendto($socket,$outMsg, 0,$peer);
}while ($inMsg !== false);
?>
2.创建一个简单的客户端(client.php)
<?php
function udpGet($sendMsg ='', $ip = '127.0.0.1',$port = '9998'){
$handle= stream_socket_client("udp://{$ip}:{$port}",$errno, $errstr);
if(!$handle ){
die("ERROR: {$errno} -{$errstr} ");
}
fwrite($handle, $sendMsg." ");
$result= fread($handle, 1024);
fclose($handle);
return$result;
}
do{
//获取当前时间的分钟
$min=(int)date('i',time());
//获取当前时间的秒
$sec=(int)date('s',time());
$s=0;
if($min%10==0){
if($sec==0){
$s=10*60;
//这里写十分钟到了的计划任务
$plan="ten minutes";
udpGet($plan);
}else{
$s=10*60-(int)date('s',time());
udpGet($s);
}
}else{
$s=(10-$min%10)*60-(int)date('s',time());
udpGet($s);
}
sleep(1);//休眠一秒
}while(true);
echo $result;
?>
方法说明
此方法可以从根本上解决对于某些商城的限时秒杀活动的定时任务脚本,利用在服务器上面的倒计时,与前端ajax的交互实现。这里主要利用了udp协议实现的定时任务【当然tcp同理】,定时任务标准为:每隔十分钟执行一次任务,计时方式根据当前系统的时间计时,每到了00、10、20、30、40、50执行一次,自动判断当前剩余时间。
其他方式
此外windows server也可以利用系统工具的计划任务实现次想法,缺点是没有脚本灵活。
当然Linux也有相应的定时任务crond,crond 是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,有兴趣的同学可以去了解下crontab命令的定时执行任务。
我是米唐,没有你做不到的,只有你想不到的。解决问题的根本在与人,所以不要不敢想。
源码下载http://pan.baidu.com/s/1dF4JOUP
点击阅读全文,今日推荐一个h5自用插件网。
以上是关于关于PHP利用udp协议实现定时任务脚本的主要内容,如果未能解决你的问题,请参考以下文章