热搜:NVER node 开发 php

PHP 的并行如何实现?

2024-09-03 22:15:01
PHP 的并行如何实现?

要实现一个广播功能,广播的表里有内容,开始时间,结束时间,间隔时间。
如图:


我用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 吧

这个问题貌似涉及到了多线程,如果在java中可以做到,弄多个线程让它跑就是了。
php不支持多线程。但是可以用一个苯点的办法实现你要的需求就是:定时任务;
linux下可以用crontab来实现。 不是linux的系统,win下怎么实现呢?能点建议吧!

1086 和 1087 的开始时间相同
你打算混合输出这两条内容?


这个问题貌似涉及到了多线程,如果在java中可以做到,弄多个线程让它跑就是了。
php不支持多线程。但是可以用一个苯点的办法实现你要的需求就是:定时任务;
linux下可以用crontab来实现。 不是linux的系统,win下怎么实现呢?能点建议吧!

windows装一个crontab工具

1086 和 1087 的开始时间相同
你打算混合输出这两条内容?
是的。他们互不干扰地输入各种预先设定好的!

不知道什么意思,

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自带的文字编辑~ 凑合看吧~

并行未必需要用多线程~ 而且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可以不用再跪着写代码了~

哎!我也看过这个swoole,可看那代码,不像是PHP的啊?而且我复制到代码里都报错。不会用啊这是!