我有一个脚本,它当前通过fsockopen()在每个循环中创建一个TCP套接字。每次打开连接时,整个PHP脚本都会暂停,直到建立连接为止。
我想沿着同时运行5个套接字的路径走下去,这样我就可以加快脚本的速度。
有什么方法可以让我“排队”一个fsockopen连接吗?理想情况下,它应该看起来像这样的伪代码。
$opensocketcount = 0;
while (1) {
if($opensocketcount < 5) {
for($i=1;$i<6;$i++) {
$sockets[$i] = fsockopen("127.0.0.1",80);
$opensocketcount++;
}
}
//Check to see if socket connection has been established
for($i=1;$i<6;$i++) {
if ( has_socket_been_established($sockets[$i]) ) {
//Post the data.
$opensocketcount -= 1;
socket_close($sockets[$i]);
$sockets[$i] = null;
}
}
}发布于 2013-05-19 19:14:57
PHP不是异步的。有一些方法可以使用shell脚本或CURL来实现多线程PHP,但所有这些都不是完美的解决方案。
如果你在前端使用它,你可以使用AJAX,因为这是异步的,像这样调用脚本"socket.php?con=1“等。在PHP脚本中,你会有一个包含所有IP的数组,并通过GET值连接到它们。然而,只有当你在前台有这个的时候,这才能起作用。对于后端方法,你必须使用像NODE.JS这样的东西
发布于 2013-06-13 01:12:29
因为PHP一次只做一件事,所以对于类似的任务( using ),我创建了一个批处理脚本,它使用参数调用多个php作业。
所以循环在批处理文件中。这还会将负载分布在多个CPU上,因为作业是分散的。该批处理从每行有10个项目的CVS文件读取信息进行扫描(以同时运行10个进程)。
它在windows服务器上运行,但同样可以应用于任何。
以下是我的批处理文件的内容作为示例:
@Echo Off For /F "usebackq tokens=1-10 delims=,“%%a in ("D:\php_run\all_locations_10.cvs") Do (
回声扫描:%%a
开始“扫描%%a”"C:\Program Files (x86)\PHP\v5.3\php.exe“"-f”"D:\php_run\wkstn_scan.php“"%%a”
回显扫描:%%b开始“扫描%%b”"C:\Program Files (x86)\PHP\v5.3\php.exe“"-f”"D:\php_run\wkstn_scan.php“"%%b”
回声扫描:%%c
开始“扫描%%c”"C:\Program Files (x86)\PHP\v5.3\php.exe“"-f”"D:\php_run\wkstn_scan.php“"%%c”
回声扫描:%%d
开始“扫描%%d”"C:\Program Files (x86)\PHP\v5.3\php.exe“"-f”"D:\php_run\wkstn_scan.php“"%%d”
回声扫描:%%e
开始“扫描%%e”"C:\Program Files (x86)\PHP\v5.3\php.exe“"-f”"D:\php_run\wkstn_scan.php“"%%e”
回声扫描:%%f
开始“扫描%%f”"C:\Program Files (x86)\PHP\v5.3\php.exe“"-f”"D:\php_run\wkstn_scan.php“"%%f”
回声扫描:%%g
开始“扫描%%g”"C:\Program Files (x86)\PHP\v5.3\php.exe“"-f”"D:\php_run\wkstn_scan.php“"%%g”
回声扫描:%%h
开始“扫描%%h”"C:\Program Files (x86)\PHP\v5.3\php.exe“"-f”"D:\php_run\wkstn_scan.php“"%%h”
回声扫描:%%i
开始“扫描%%i”"C:\Program Files (x86)\PHP\v5.3\php.exe“"-f”"D:\php_run\wkstn_scan.php“"%%i”
回声扫描:%%j
开始扫描%%j“"C:\Program Files (X86) /WAIT”"-f“"D:\php_run\wkstn_scan.php”"%%j“
)
https://stackoverflow.com/questions/16633988
复制相似问题