PHP Sockets, цикл зависает в MSG_WAITALL. Что еще я могу сделать? - PullRequest
0 голосов
/ 07 мая 2019

Извините за продвинутый, поскольку я новичок в кодировании и PHP.Я получаю данные UDP каждые пару минут.Затем я пытаюсь использовать цикл while для проверки данных, а затем выводить что-то в зависимости от того, что это за данные.Через определенное время я хочу выводить что-то еще из базы данных, пока не поступят новые данные. Проблема в том, что когда он снова проверяет сокет, он ожидает поступления новых данных. Я хочу, чтобы вместо этого он продолжал выводить данные избаза данных каждые x секунд, пока не поступят новые данные из сокета.

Данные представлены фрагментами со случайным количеством символов.В настоящее время, чтобы получить одну читаемую строку, я использую MSG_WAITALL для получения всех данных, которые я могу использовать, потому что MSG_DONTWAIT дает мне странные результаты.Я предполагаю, что MSG_WAITALL - это то, что заставляет его останавливаться, потому что оператор if, который выводит эхо из базы данных, выполняется только один раз, пока не поступят новые данные из сокета.

Надеюсь, я объяснил это достаточно хорошо.Что еще я могу попробовать?


while(1)
{
    $r = socket_recvfrom($sock, $buf, 12, MSG_WAITALL, $remote_ip, 
       $remote_port);
    $word = $word.$buf;
    $startTime = date("Y-m-d H:i:s");

    if($word = example1)
    {
        //do this 
        //add time to timer
    }

    elseif($word = example2)
    {
        //do this
        //add time to timer
    }

    else(currentTime > timer)
    {
        //echo from database
        //add time to timer
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...