У меня есть демон UDP, написанный на PHP, который получает данные с удаленных UDP-устройств.
$sock = socket_create(AF_INET, SOCK_DGRAM, 0);
socket_bind($sock, 0, $port) or die('Could not bind to address');
while (true) {
$r = socket_recvfrom($sock, $buf, 65535, 0, $remote_ip, $remote_port);
echo "$remote_ip : $remote_port -- " . $buf ."\n";
echo strlen($buf) . "\n";
// DO DATABASE FUNCTIONS
}
Есть ли способ сбросить буфер после каждого x итераций, поскольку кажется, что в какой-то момент он заполняется, и функция базы данных больше не работает, пока я не убью и не перезагружу приложение?
Данные не критичны (почему я использую UDP)
Использовать ob_flush()
$sock = socket_create(AF_INET, SOCK_DGRAM, 0);
socket_bind($sock, 0, $port) or die('Could not bind to address');
while (true) {
$r = socket_recvfrom($sock, $buf, 65535, 0, $remote_ip, $remote_port);
echo "$remote_ip : $remote_port -- " . $buf ."\n";
echo strlen($buf) . "\n";
if(strlen($buf)%1024 == 0)
{
flush();
ob_flush();
}
// DO DATABASE FUNCTIONS
}
Иногда вам может понадобиться также использовать flush()
. Причина объясняется здесь: qaru.site/questions/92451/...