PHP如何非阻塞批量推送数据

今天看到论坛里面有人问如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]);
        }
    }
}






你可能感兴趣的:(php)