作者:吻过彩虹的脸_378 | 2021-08-03 10:35
PHP的并行如何实现?本帖最后由hellon_no于2014-02-2713:51:10编辑要实现一个广播功能,广播的表里有内容,开始时间,结束时间,间隔时间。如图:我用
PHP 的并行如何实现?
本帖最后由 hellon_no 于 2014-02-27 13:51:10 编辑
要实现一个广播功能,广播的表里有内容,开始时间,结束时间,间隔时间。
如图:
我用do while 做定时处理,代码如下:
do{
$ti = strtotime(date('Y-m-d H:i:s'));//当前时间戳
$array = $this->all_broadcast();//广播数组
foreach($array as $key => $val){
$intervals = 60;//(秒)间隔时间
$content = urlencode($val['content']);//广播内容
if($ti >= $val['starttime'] && $ti <= $val['endtime']){//判断当前时间是否大于等于开始时间并且小于等于结束时间
$hello = $this->get_curl($content);//调用广播的方法开始
广播 sleep($intervals);//间隔时间调用一次
}
fclose($fp);
}
sleep(10);//10秒
}while(true);
现在的问题是:如果广播是一条的话,可以根据间隔时间来按时广播。如果广播有好几条,那他就不能在同一时间调用get_curl方法N次。这要怎么解决呢?
怎样能让他们根据各自的开始时间、结束时间、间隔时间,互不干扰地进行播放呢?
这是不是需要PHP中的并行来实现呢?
------解决方案--------------------这个问题貌似涉及到了多线程,如果在java中可以做到,弄多个线程让它跑就是了。
php不支持多线程。但是可以用一个苯点的办法实现你要的需求就是:定时任务;
linux下可以用crontab来实现。
------解决方案--------------------试试 curl_multi 吧
------解决方案--------------------1086 和 1087 的开始时间相同
你打算混合输出这两条内容?
------解决方案--------------------------解决方案--------------------windows装一个crontab工具
------解决方案-------------------- sleep(10);//10秒
这个不会在网页上显示内容 啊只有10 过后才会显示,一次性显示,
你的好像是死循环吧
我也是新人
------解决方案--------------------并行未必需要用多线程~ 而且php的多线程库在cgi下鬼知道会发生什么情况,绝对要好好测试下,有兴趣的同学试试。
回到正题,楼主可能需要的是异步~
比如程序运行到某一刻发一条通知到某个处理单元(实现方式先不论),然后也不等待这个处理单元的处理结果就直接向下执行,这样就能省下时间~
关于这个,鸟哥讨论过几种实现方式~
http://www.laruence.com/2008/04/14/318.html
另,其中用curl的办法有点小变化,我在评论里加了一笔。
翻了一下文档~ 发现curl 有了毫秒级的超时设置~
CURLOPT_CONNECTTIMEOUT_MS 这个选项
备注: Added in cURL 7.16.2. Available since PHP 5.2.3
我现在用的cURL 7.24 和 php5.4 ~ 暗爽~
当然,时隔这么久,也许有其它更好的办法~http://www.swoole.com/ 就是一例,私以为这个堪成大器,phper可以不用再跪着写代码了~
------解决方案--------------------好吧,有点不太习惯CSDN自带的文字编辑~ 凑合看吧~