PHP套接字_recvfrom免费资源
我有一个用PHP编写的UDP守护进程,它从远程UDP设备接收数据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
$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
}