我正在使用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);
}
提前致谢!
答案 0 :(得分:0)
套接字有缓冲区,你可能不会错过任何数据包。 - Bun 2014年7月4日13:42
所以我可以等待一段时间,直到我认为所有数据包必须在那里,然后得到所有? - Tim Jul 4
是的,您可以等待超时时间,然后阅读所有回复。 - Bun 2014年7月4日14:15