php使用udp协议,关于PHP利用udp协议实现定时任务脚本

1.创建一个简单的udp服务器(server.php)

//服务器信息

$server= 'udp://127.0.0.1:9998';

//消息结束符号

$msg_eof= "\n";

$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\r\n");

stream_socket_sendto($socket,$outMsg, 0,$peer);

}while ($inMsg !== false);

?>

2.创建一个简单的客户端(client.php)f2996ca336626bdb2ca292e7c5997e5b.png

functionudpGet($sendMsg ='', $ip = '127.0.0.1',$port ='9998'){

$handle= stream_socket_client("udp://{$ip}:{$port}",$errno, $errstr);

if(!$handle ){

die("ERROR:{$errno} -{$errstr}\n");

}

fwrite($handle, $sendMsg."\n");

$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自用插件网。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值