PHP socket_recv из бесплатных ресурсов

1

У меня есть демон 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)

Теги:
sockets
udp

1 ответ

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

Использовать 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/...

  • 0
    Спасибо за редактирование. Был только, чтобы указать!
  • 0
    Это нормально, сбрасывая на кратные 1024, хотя мой буфер 65535?
Показать ещё 1 комментарий

Ещё вопросы

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