PHp批量推送数据太慢,PHP非阻塞批量推送数据-php教程
明天看到論壇外面有人問如PHP何批量非梗阻向效勞器推送數據,這里大略總結下。
相干保舉:《PHP教程》
一、最簡略的方法:
一個劇本同時跑屢次,用參數來跑指定范疇。如果要推送10000用戶,能夠每一100個用戶運轉一個劇本(劇本邏輯就是輪回遍歷100個用戶,串行的發送數據,代碼略),而且多個(100)劇本同時運轉。
相似:
php task.php 1 100 &
php task.php 101 200 &
php task.php 201 300 &
........
當然這個辦法沒有長短梗阻的,然而能夠批量操作,年夜年夜放慢解決速率。
二、費事點的:假如想要非梗阻而且是HTTP協定的話
能夠用上面的代碼
// 創立一對cURL資本
$ch1 = curl_init();
$ch2 = curl_init();
// 設置URL以及相應的選項
curl_setopt($ch1, CURLOPT_URL, "http://百度.com/");
curl_setopt($ch1, CURLOPT_HEADER, 0);
curl_setopt($ch2, CURLOPT_URL, "http://百度.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);
三、非梗阻,而且沒有是HTTP協定的話,需求應用php的socket + stream_select
// uid數組,每一個uid發送一個鏈接
$uids = array(1,2,3,4,5,6);
// 保留socket的數組
$sockets = array();
// 批量創立鏈接并發送數據
foreach($uids as $uid)
{
// tcp://百度.com 改為你要拜訪的ip或許域名
if(!$socket = stream_socket_client("tcp://百度.com:80", $errno, $errstr))
{
echo "$errstr\n";
continue;
}
// 依據本人的協定向效勞端寫入數據,這里模仿HTTP協定
fwrite($socket, "GET / HTTP/1.1\r\nHost: www.百度.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非梗阻批量推送數據的具體內容,更多請存眷資源魔其它相干文章!
本網站(www.ziyuanmo.com)刊載的所有內容,包括文字、圖片、音頻、視頻、軟件、程序、以及網頁版式設計等均由用戶發表。
虛擬收費資源付款后概不退款,請考慮在三后支付!如有侵權可聯系郵箱:ziyuanmo@admin.com,會在第一時間解決!
資源貓 ? PHP非阻塞批量推送數據-php教程
分享到:
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的PHp批量推送数据太慢,PHP非阻塞批量推送数据-php教程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php is resource,PHP有
- 下一篇: Java第三大的数,Java通过排序找出