Что-то вроде темы в php - PullRequest
       4

Что-то вроде темы в php

0 голосов
/ 23 сентября 2011

Я пытаюсь запрограммировать робота Yahoo Messenger, теперь мой робот может получать сообщения и отвечать на них.Yahoo может отправлять только 100 вечера каждый раз, когда я получаю уведомление.

Теперь я хочу ответить на каждый час.Я использую while(true){ } и отвечаю сначала в личку, потом во вторую, потом на 3 и….Это так медленно, потому что я могу установить только одно соединение с Yahoo (я использую curlib).Как я могу отправить несколько сообщений одновременно? Я думаю, что мне нужно что-то вроде потока, но в php.

Ответы [ 2 ]

3 голосов
/ 23 сентября 2011

вы можете использовать pcntl_fork (). http://www.php.net/manual/en/function.pcntl-fork.php

Вам нужно расширение pcntl, и оно работает только в Unix

Если вы используете функцию curl, вы можете взглянуть на curl_multi_init (). http://www.php.net/manual/en/function.curl-multi-init.php

0 голосов
/ 08 ноября 2011

Ниже я написал простую функцию, которая запускает URL-адрес и не ждет результата , поэтому, например, вы можете запускать множество URL-адресов на своем собственном сайте, это ускорит ваш цикл , а также нет необходимости устанавливать какие-либо расширения на ваш сервер.

function call_url_async($url, $params, $type='POST', $timeout_in_seconds = 1)
{
    //call the URL and don't wait for the result - useful to do time-consuming tasks in background
    foreach ($params as $key => &$val) 
    {
        if (is_array($val)) 
            $val = implode(',', $val);
        $post_params[] = $key.'='.urlencode($val);
    }
    $post_string = implode('&', $post_params);

    $parts=parse_url($url);

    $fp = fsockopen($parts['host'], isset($parts['port'])?$parts['port']:80, $errno, $errstr, $timeout_in_seconds);
    //if ($fp == FALSE)
    //  echo "Couldn't open a socket to ".$url." (".$errstr.")<br><br>";

    // Data goes in the path for a GET request
    if ('GET' == $type) 
        $parts['path'] .= '?'.$post_string;

    $out = "$type ".$parts['path']." HTTP/1.1\r\n";
    $out.= "Host: ".$parts['host']."\r\n";
    $out.= "Content-Type: application/x-www-form-urlencoded\r\n";
    $out.= "Content-Length: ".strlen($post_string)."\r\n";
    $out.= "Connection: Close\r\n\r\n";
    // Data goes in the request body for a POST request
    if ('POST' == $type && isset($post_string)) 
        $out.= $post_string;

    fwrite($fp, $out);
    fclose($fp);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...