PHp批量推送数据太慢,PHP非壅塞批量推送数据_后端开发

news/2025/2/25 18:58:13

本日看到论坛内里有人问如PHP何批量非壅塞向服务器推送数据,这里也许总结下。

相干引荐:《PHP教程》

1、最简朴的要领:

一个剧本同时跑屡次,用参数来跑指定局限。假如要推送10000用户,能够每100个用户运转一个剧本(剧本逻辑就是轮回遍历100个用户,串行的发送数据,代码略),而且多个(100)剧本同时运转。

相似:

php task.php 1 100 &

php task.php 101 200 &

php task.php 201 300 &

........

固然这个要领不黑白壅塞的,然则能够批量操纵,大大加速处置惩罚速率。

2、贫苦点的:假如想要非壅塞而且是HTTP协定的话

能够用下面的代码

// 建立一对cURL资本

$ch1 = curl_init();

$ch2 = curl_init();

// 设置URL和响应的选项

curl_setopt($ch1, CURLOPT_URL, "http://baidu.com/");

curl_setopt($ch1, CURLOPT_HEADER, 0);

curl_setopt($ch2, CURLOPT_URL, "http://baidu.com/");

curl_setopt($ch2, CURLOPT_HEADER, 0);

// 建立批处置惩罚cURL句柄

$mh = curl_multi_init();

// 增添2个句柄

curl_multi_add_handle($mh,$ch1);

curl_multi_add_handle($mh,$ch2);

$active = null;

// 实行批处置惩罚句柄

do {

$mrc = curl_multi_exec($mh, $active);

} while ($mrc == CURLM_CALL_MULTI_PERFORM);

// 轮询Server返回的效果

while ($active && $mrc == CURLM_OK) {

if (curl_multi_select($mh) != -1) {

do {

$mrc = curl_multi_exec($mh, $active);

} while ($mrc == CURLM_CALL_MULTI_PERFORM);

}

}

// 汇总效果......

// 封闭悉数句柄

curl_multi_remove_handle($mh, $ch1);

curl_multi_remove_handle($mh, $ch2);

curl_multi_close($mh);

3、非壅塞,而且不是HTTP协定的话,须要运用php的socket + stream_select

// uid数组,每一个uid发送一个链接

$uids = array(1,2,3,4,5,6);

// 保留socket的数组

$sockets = array();

// 批量建立链接并发送数据

foreach($uids as $uid)

{

// tcp://baidu.com 改成你要接见的ip或许域名

if(!$socket = stream_socket_client("tcp://baidu.com:80", $errno, $errstr))

{

echo "$errstr\n";

continue;

}

// 依据本身的协定向服务端写入数据,这里模仿HTTP协定

fwrite($socket, "GET / HTTP/1.1\r\nHost: www.baidu.com\r\n\r\n");

// 设置成非壅塞

stream_set_blocking($socket, 0);

// 纪录数组

$sockets[(int)$socket] = $socket;

}

// 批量守候数据返回

while(count($sockets)>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非壅塞批量推送数据的细致内容,更多请关注ki4网别的相干文章!

收藏 | 0


http://www.niftyadmin.cn/n/4084339.html

相关文章

ipa 打包遇到的坑

1.xcode 打包 并上传至 appstore 审核 2.预留邮箱 收取 appstore 的审核结果 3.审核通过以后,通过 iTunes Connect 上传正式文件至 appstore 网址:https://itunesconnect.apple.com/login 转自:http://www.cnblogs.com/mddblog/p/471…

centos7下mysql5.6的主从复制

一、mysql主从复制介绍mysql的主从复制并不是数据库磁盘上的文件直接拷贝,而是通过逻辑的binlog日志复制到要同步的服务器本地,然后由本地的线程读取日志里面的sql语句,重新应用到mysql数据库中。mysql数据库支持单向,双向&#x…

php对json数据处理,PHP JSON数据处理用法

在php中JSON数据处理最常用的就是直接使用json_encode()与json_decode()函数进行处理,就这两个json处理函数给各位同学详细介绍json在应用中的各种用法.json_encode(),PHP数据->JSONjson_encode只有一个参数,参数除了resource 类型之外,可以为任何数据类型,但是我们一般是传…

做ERP好比弹钢琴

做ERP好比弹钢琴 钢琴与ERP本来是没有什么关系的,然而对于某些问题的理解,也许我们脱离其中,换一个视角,做一番类比,更能够直接体会到它的本质,要避免“不识庐山真面目,只缘身在此山中”的尴尬。…

什么是Azure HDInsight

HDInsight 上的 Hadoop 是什么? Hadoop 是一种开源软件生态系统,在计算机群集上充当大数据的分布式处理、存储和分析框架。 借助 Azure HDInsight,可以在云中使用 Hortonworks 数据平台 (HDP) 分发版中的 Hadoop 组件,部署具有高可…

怎样判断用户已经掉线,关闭网页

仔细研究了 connection_status 和 connection_aborted 了解清楚他们的用法: <?echo str_repeat(" ",300);ignore_user_abort(true); //没有这个一旦用户断线,php(线程)就会立即终止!没有机会执行" if connection_status()!0||connection_aborted){"了…

php中获取文件扩展名,如何在PHP中获取文件扩展名?

本问题已经有最佳答案&#xff0c;请猛点这里访问。Possible Duplicate:How to extract a file extension in PHP?我希望获得我上传的图像的文件扩展名&#xff0c;但我只是得到了一个数组。$userfile_name $_FILES[image][name];$userfile_extn explode(".", str…

Terminal Server客户始终登录域

要实现这一点&#xff0c;可以参考以下几种方法&#xff1a; 1、修改gina.dll文件&#xff0c;这个方法在windows ad这一块讨论的可能比较多&#xff0c;百度一下&#xff0c;你就知道&#xff0c;自己没试过&#xff1b;2、登录时直接输入帐号的upn名&#xff0c;可以输入soft…