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中的多套接字流_Php_Sockets - Fatal编程技术网

PHP中的多套接字流

PHP中的多套接字流,php,sockets,Php,Sockets,在PHP中,我的脚本仅尝试测试服务器是否在线,仅此而已。我将如何创建同时运行的多个套接字流?如果您正在测试一组服务器,那么一个接一个地进行测试将花费很长时间。通常,您会启动一个线程池,线程将从队列中读取所有需要测试的站点。这将允许每个线程打开到站点的连接(支持并发性) 或者可能?我不知道,我从来没有用php编写过线程代码。这将获取要读取或写入的套接字列表,然后告诉您它们何时准备就绪。当您读/写这些数据时,您知道您将能够获取/发送一些数据。然后处理需要在这些套接字上执行的操作,然后返回并再次选择“

在PHP中,我的脚本仅尝试测试服务器是否在线,仅此而已。我将如何创建同时运行的多个套接字流?如果您正在测试一组服务器,那么一个接一个地进行测试将花费很长时间。

通常,您会启动一个线程池,线程将从队列中读取所有需要测试的站点。这将允许每个线程打开到站点的连接(支持并发性)

或者可能?我不知道,我从来没有用php编写过线程代码。这将获取要读取或写入的套接字列表,然后告诉您它们何时准备就绪。当您读/写这些数据时,您知道您将能够获取/发送一些数据。然后处理需要在这些套接字上执行的操作,然后返回并再次选择“等待更多数据”

如果您还需要做其他事情,请在select上设置超时,它将在该时间内返回,即使任何套接字上都没有准备好


编辑:而且,一旦您弄清楚如何使用select(不是那么难),调试和处理它比处理线程之间的同步要简单得多

不,不要使用线程。线程是处理任意数量连接的IO的可怕方式(至少1:1--N:M很好,但要困难得多)。请参阅我的答案,以获得更好的选择。停止散布恐惧。。。select()最适合于手头的任务,但不要对某些事情发表笼统的声明,至少你尝试过…@JoeWatkins散布恐惧似乎有点苛刻。在处理复杂系统时,避免线程是每个人的一大优势。你永远也找不到一个用线程实现的端口扫描程序。毫无疑问,我们使用的最复杂的系统(即操作系统,它扩展到了整个互联网)如果没有并发计算的话,在任何地方都不会工作得像它们那样好。。。此外,端口扫描仪与复杂系统完全不同,我已经说过select()最适合手头的任务…@JoeWatkins我没有说这是不可能的,也没有说它从来都不是正确的解决方案。我也没有说端口扫描器很复杂——我说你永远也找不到使用线程的端口扫描器。另外,在复杂系统中,线程变得很困难,如果你问这个问题,你可能不是一个有经验的内核开发人员。你做了一个愚蠢的陈述,没有任何实际依据:“当你处理复杂系统时,避免线程会让每个人都受益匪浅。”这也是我的回答。。。