在php中尽可能快地调用函数5秒

时间:2014-07-04 13:40:15

标签: php sockets networking udp

我正在使用php制作一个从不同服务器收集数据的程序。我尝试将大量udp数据包发送到不同的服务器,如下所示:

$socketList = stream_socket_client('udp://'.$ip , $errno, $errstr, 1);
stream_set_blocking($socketList, 0);
fwrite($socketList, "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x66\x73\x74\x64\x05");

计划获得数据包的某些服务器无法应答。在那种情况下,我尝试发送另一个数据包。我正在使用非阻塞模式,因为我不希望每个无法应答的服务器都有1秒超时。所以我的想法是首先发送所有数据包,然后使用此函数在所有数据包中等待5秒钟:

$data = fread($socketList, 2048);

我的问题是我不知道如何在php中制作一个尽可能快地运行5秒的while循环。

我也不知道它是否必须尽可能快地运行以避免错过数据包。像这样的东西会抓住每个包吗?

for($i = 0, $i = < 50, $i++) {
    $data = fread($socketList, 2048);
    sleep(0.1);
}

提前致谢!

1 个答案:

答案 0 :(得分:0)

套接字有缓冲区,你可能不会错过任何数据包。 - Bun 2014年7月4日13:42

所以我可以等待一段时间,直到我认为所有数据包必须在那里,然后得到所有? - Tim Jul 4

是的,您可以等待超时时间,然后阅读所有回复。 - Bun 2014年7月4日14:15