Пример #1
0
/**
 * @param $size
 * @param $concurrencyLevel
 * @param $verbose
 */
function multi($size, $concurrencyLevel, $verbose)
{
    //    if ($concurrencyLevel > 250) {
    //        $concurrencyLevel = 250;
    //        echo 'Rate limit to 250' . PHP_EOL;
    //    }
    echo 'size = ' . $size . ', concurrency level = ' . $concurrencyLevel . PHP_EOL;
    $tasks = urlProvider($size);
    $multiHandle = curl_multi_init();
    // init the curl Multi
    $concurrentRequests = [];
    // create an array for the individual curl handles
    for ($i = 0; $i < $concurrencyLevel; $i++) {
        $url = nextTask($tasks);
        if ($url === null) {
            break;
        }
        echo '.';
        $request = newRequest($url);
        curl_multi_add_handle($multiHandle, $request);
        $concurrentRequests[$url] = $request;
    }
    $retry = 0;
    $fail = 0;
    $success = 0;
    $running = null;
    $noMoreTasks = false;
    $retryQueue = [];
    do {
        while (($ret = curl_multi_exec($multiHandle, $running)) === CURLM_CALL_MULTI_PERFORM) {
        }
        if ($ret !== CURLM_OK) {
            break;
        }
        // a request was just completed -- find out which one
        while ($done = curl_multi_info_read($multiHandle)) {
            // on complete event
            $doneHandle = $done['handle'];
            $info = curl_getinfo($doneHandle);
            $doneUrl = $info['url'];
            unset($concurrentRequests[$doneUrl]);
            // on complete successfully
            if ($info['http_code'] === 200) {
                $success++;
                $output = curl_multi_getcontent($done['handle']);
                assert(is_string($output));
                if ($verbose) {
                    echo 'response len = ' . strlen($output) . PHP_EOL;
                }
                if ($noMoreTasks || ($url = nextTask($tasks)) === null) {
                    $noMoreTasks = true;
                    continue;
                }
                echo '.';
                // start a new request (it's important to do this before removing the old one)
                refillQueue($multiHandle, $concurrentRequests, $url);
                $running++;
                // remove the curl handle that just completed
                curl_multi_remove_handle($multiHandle, $doneHandle);
                //                echo "done url: " . $doneUrl . PHP_EOL;
                //                echo 'add new request: ' . $url . PHP_EOL;
                //                print_r($concurrentRequests);
            } else {
                // on complete failed
                if (!array_key_exists($doneUrl, $retryQueue)) {
                    $retryQueue[$doneUrl] = 0;
                    echo 'error[' . curl_errno($doneHandle) . '] on ' . $doneUrl . ' => ' . curl_error($doneHandle) . PHP_EOL;
                }
                $retryQueue[$doneUrl]++;
                if ($retryQueue[$doneUrl] < 3) {
                    refillQueue($multiHandle, $concurrentRequests, $doneUrl);
                    $running++;
                    $retry++;
                    curl_multi_remove_handle($multiHandle, $doneHandle);
                    usleep(100000);
                } else {
                    $fail++;
                }
            }
        }
    } while ($running);
    curl_multi_close($multiHandle);
    echo PHP_EOL . "success: {$success}, retry: {$retry}, fail: {$fail}" . PHP_EOL;
}
echo "<p>testing NewFamilyProfile, expect an array of users to be emailed<p>";
NewFamilyProfile(345);
echo "<p>testing Confirm<p>";
Confirm(7, '3/3', '3/4', 2, 2);
echo "<p>Testing RequestAccept<p>";
RequestAccept(7, '3/2', '3/3', 2, 2);
echo "<p>Testing RequesDeny<p>";
RequestDeny(7, '3/2', '3/3', 2, 2);
echo "testing FamilyModConfirm<p>";
FamilyModConfirm(7, 2, 2);
echo "<p>Testing FamilyModAccept<p>";
FamilyModAccept(7, 2, 2);
echo "<p>testing FamilyModDeny<p>";
FamilyModDeny(7, 2, 2);
echo "<p>Testing newRequest<p>";
newRequest(123, '3/1', '3/2', '3/3');
echo "<p>Testing NewReservationMod<p>";
newReservationMod(1234, '3/1', 2);
echo "<p>Testing NewCancel<p>";
newCancel(1321321321, '3/1', 2);
echo "<p>Testing newFamilyMod</br>";
newFamilyMod(1321321321, '3/1', 2);
echo "<p>testing family confirm<p>";
FamilyConfirm(2, '3/1', '3/2', 'nsdjasdjad');
//Testing Mail to STjohns Email
echo "<p> Testing  ST johns Email</br>";
$to = '*****@*****.**';
//valid destination email address
$subject = 'testing php mail function windows';
$message = 'This is a test email, I am testing the php mail function';
$mailed = mail($to, $subject, $message);