PHP如何非阻塞批量推送数据
程序员文章站
2022-06-17 12:01:07
...
今天看到论坛里面有人问如PHP何批量非阻塞向服务器推送数据,这里大概总结下。 1、最简单的办法: 一个脚本同时跑多次,用参数来跑指定范围。假如要推送10000用户,可以每100个用户运行一个脚本(脚本逻辑就是循环遍历100个用户,串行的发送数据,代码略),
今天看到论坛里面有人问如PHP何批量非阻塞向服务器推送数据,这里大概总结下。
1、最简单的办法:
一个脚本同时跑多次,用参数来跑指定范围。假如要推送10000用户,可以每100个用户运行一个脚本(脚本逻辑就是循环遍历100个用户,串行的发送数据,代码略),并且多个(100)脚本同时运行。
类似:
php task.php 1 100 &
php task.php 101 200 &
php task.php 201 300 &
........
当然这个方法不是非阻塞的,但是可以批量操作,大大加快处理速度。
2、麻烦点的:如果想要非阻塞并且是HTTP协议的话
可以用下面的代码
3、非阻塞,并且不是HTTP协议的话,需要使用php的socket + stream_select
0) { $read = $sockets; $write = $e = array(); // 等待数据可读 if(stream_select($read, $write, $e, 10)) { // 循环读数据 foreach($read as $socket) { // 这里是服务端返回的数据,需要的话可以循环读 echo fread($socket, 8192); // 数据读取完毕关闭链接,并删除链接 fclose($socket); unset($sockets[(int)$socket]); } } }