PHP fgets () всегда останавливается в сокете даже после чтения некоторых данных

Я создаю сокет следующим образом:

$fp = fsockopen("tcp://".$ip, $port, $errno, $errstr);
stream_set_timeout($fp, 1); // timeout is one second
stream_set_blocking($fp, 1); // block until data is available

Однако, когда я читаю, я всегда получаю тайм-аут, даже после чтения данных:

while(true) {
$result = fgets($fp, 4096);
if(empty($result)) {
break;
}
else {
echo $result;
}
}

Я думаю, что мой метод чтения неправильный, потому что я не совсем понимаю, как php-сокеты работают в фоновом режиме. Мое намерение — читать до тех пор, пока данных больше не будет, или сдаться, если я пытался читать данные в течение определенного периода времени, но данные не стали доступны.

В различных примерах PHP-сокетов я видел использование while (! Feof ($ fp)) для остановки цикла чтения, но, насколько я понимаю, другой конец никогда не отправит маркер eof. Они только отправляют сообщения с разделителями новой строки.

Есть идеи?

Благодарю.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …