сокет php, php, медленный сокет, лучше выполнить сокет

0

Я создаю aplicattion для чтения значения из ПЛК. Когда я использовал один сокет функции php-страница работает нормально, но когда я ставлю два или более, мне нужно около 20 секунд, чтобы открыть один php.

Somene Knwos я могу улучшить свой код или сокеты в php, вот так???

Его мой код:

<?php
    $dados_recebidos = analisa_dados_dos_turnos($host, $port);
    $ranking = prioridade_dos_turnos($host, $port);
?>
<?php
    function  analisa_dados_dos_turnos($host, $port)
    {   
        $message = "01ff000a4420000002583f00"; // D600 a D662
        $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("Could not create socket\n");     
        $result = socket_connect($socket, $host, $port) or die("Could not connect to server\n");        
        socket_write($socket, $message, strlen($message)) or die("Could not send data to server\n");        
        $result = socket_read ($socket, 1024) or die("Could not read server response\n");       
        socket_shutdown($socket);   
        return $result;
    }
    function prioridade_dos_turnos($host, $port)
    {   
        $message = "01ff000a4420000004291000"; // D1065 a D1079
        $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("Could not create socket\n");     
        $result = socket_connect($socket, $host, $port) or die("Could not connect to server\n");        
        socket_write($socket, $message, strlen($message)) or die("Could not send data to server\n");        
        $result = socket_read ($socket, 2048) or die("Could not read server response\n");       
        //socket_shutdown($socket); 
        return $result;
    }
?>
  • 0
    Почему вы не используете socket_shutdown () в сокете ранжирования $?
  • 0
    Обычно я использую socket_close (), но это то же самое для меня. Дело в том. , Мне нужно 20 секунд, чтобы загрузить страницу, и я не знаю почему :(
Теги:
performance
sockets

1 ответ

0
Лучший ответ

Это то же самое, если вы повторяете analisa_dados_dos_turnos() несколько раз?

Я не эксперт по сокетам, но я бы попытался добавить код подсчета времени, чтобы увидеть, какая часть вызывает задержку.

    $start_time = microtime(TRUE);
     //DO SOMETHING
    $stop_time = microtime(TRUE);
    $elapsedtime = $stop_time - $start_time;
    echo '<BR>Elapsed Time: '.$elapsedtime; 

Например, вы могли бы

    $start_time = microtime(TRUE);
    $dados_recebidos = analisa_dados_dos_turnos($host, $port);
    $stop_time = microtime(TRUE);
    $elapsedtime = $stop_time - $start_time;
    echo '<BR>dados_recebidos 1 Elapsed Time: '.$elapsedtime;

    $start_time = microtime(TRUE);
    $dados_recebidos = analisa_dados_dos_turnos($host, $port);
    $stop_time = microtime(TRUE);
    $elapsedtime = $stop_time - $start_time;
    echo '<BR>dados_recebidos 2 Elapsed Time: '.$elapsedtime;

    $start_time = microtime(TRUE);
    $ranking = prioridade_dos_turnos($host, $port);
    $stop_time = microtime(TRUE);
    $elapsedtime = $stop_time - $start_time;
    echo '<BR>ranking 1 Elapsed Time: '.$elapsedtime;

    $start_time = microtime(TRUE);
    $ranking = prioridade_dos_turnos($host, $port);
    $stop_time = microtime(TRUE);
    $elapsedtime = $stop_time - $start_time;
    echo '<BR>ranking 2 Elapsed Time: '.$elapsedtime;

и сломать его еще дальше.

     function prioridade_dos_turnos($host, $port)
{   
    $message = "01ff000a4420000004291000"; // D1065 a D1079

    $start_time = microtime(TRUE);
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("Could not create socket\n"); 
    $stop_time = microtime(TRUE);
    $elapsedtime = $stop_time - $start_time;
    echo '<BR>socket_create Elapsed Time: '.$elapsedtime;

    $start_time = microtime(TRUE);
    $result = socket_connect($socket, $host, $port) or die("Could not connect to server\n");
    $stop_time = microtime(TRUE);
    $elapsedtime = $stop_time - $start_time;
    echo '<BR>socket_connect Elapsed Time: '.$elapsedtime;

    $start_time = microtime(TRUE);
    socket_write($socket, $message, strlen($message)) or die("Could not send data to server\n");
    $stop_time = microtime(TRUE);
    $elapsedtime = $stop_time - $start_time;
    echo '<BR>socket_write Elapsed Time: '.$elapsedtime;

    $start_time = microtime(TRUE);        
    $result = socket_read ($socket, 2048) or die("Could not read server response\n");
    $stop_time = microtime(TRUE);
    $elapsedtime = $stop_time - $start_time;
    echo '<BR>socket_read Elapsed Time: '.$elapsedtime; 

    $start_time = microtime(TRUE);       
    socket_shutdown($socket);
    $stop_time = microtime(TRUE);
    $elapsedtime = $stop_time - $start_time;
    echo '<BR>socket_shutdown Elapsed Time: '.$elapsedtime;         
    return $result;
}
  • 0
    Грег, я уже измеряю время, и у меня есть 3 секунды для всего кода на странице php. У меня две страницы одна постоянно получает, другая постоянно отправляет. , . Возможно ли проблема в том, что при сокете происходит сбой при выполнении двух задач одновременно?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню