Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP套接字_recvfrom免费资源_Php_Sockets_Udp - Fatal编程技术网

PHP套接字_recvfrom免费资源

PHP套接字_recvfrom免费资源,php,sockets,udp,Php,Sockets,Udp,我有一个用PHP编写的UDP守护进程,它从远程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 "$remot

我有一个用PHP编写的UDP守护进程,它从远程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的原因)

使用


有时,您可能还需要使用
flush()
。此处解释的原因:

即使我的缓冲区是65535,也可以以1024的倍数刷新吗?socket_recvfrom()中的第三个参数表示$buf可以容纳的最大长度。假设您只接收10000字节,那么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
}