php - PHP socket_recv来自免费资源

标签 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 "$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()。原因在这里解释:https://stackoverflow.com/a/4191417/1218075

关于php - PHP socket_recv来自免费资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30438442/

相关文章:

java - Java-服务器可同时为多个客户端提供服务

java - 如果我尝试通过 DatagramChannel 发送空 UDP 数据包但底层套接字缓冲区已满,会发生什么情况?

javascript - 表单提交不适用于 WordPress 管理中的下拉更改

php - 性能衡量Mysql View VS UNION of table

c++ - setsockopt 错误 WSAEADDRNOTAVAIL

sockets - UDP数据包不发送?

sockets - Flutter 中的 udp 套接字未收到任何内容

php - 两个菱形问号而不是倒置感叹号

php - 如何在一个具有不同ID的字段中插入多个文本框值?

linux - Ubuntu Lucid 和 Trusty 之间的 Unix 域套接字权限