Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.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
windows上的PHP命名管道_Php_Windows_Named Pipes - Fatal编程技术网

windows上的PHP命名管道

windows上的PHP命名管道,php,windows,named-pipes,Php,Windows,Named Pipes,好的,下面是场景。假设我得到了一个php脚本,它应该等待某些信息可用,我想如果我能让这个脚本阻塞,而不是在信息可用之前忙着循环,这将是一个很好的解决方案。信息本身将由另一个php脚本实例提供。假设我想阻止X个这样的请求,直到脚本的这1个实例传递这个信息。 我想我可以使用一个命名管道,读卡器进程将阻塞等待写入管道的过程,而编写器将通过管道或其他方式提供所需的信息来写入并立即解除所有读卡器的阻塞。 我找到了posix_mkfifo,但它不能在windows上单独工作,是否有其他方法可以在window

好的,下面是场景。假设我得到了一个php脚本,它应该等待某些信息可用,我想如果我能让这个脚本阻塞,而不是在信息可用之前忙着循环,这将是一个很好的解决方案。信息本身将由另一个php脚本实例提供。假设我想阻止X个这样的请求,直到脚本的这1个实例传递这个信息。 我想我可以使用一个命名管道,读卡器进程将阻塞等待写入管道的过程,而编写器将通过管道或其他方式提供所需的信息来写入并立即解除所有读卡器的阻塞。 我找到了posix_mkfifo,但它不能在windows上单独工作,是否有其他方法可以在windows和*nix上工作。 或者,也许有某种方法可以阻止一堆请求,一旦到了时间,另一个请求就可以“释放它们”。
我真的不想求助于繁忙的循环,我想在不使用1秒延迟和sutch的情况下节省cpu。

如果您有可用的套接字扩展(或
stream\u socket\u server()
),您可以在脚本中创建一个套接字服务器,为其他脚本提供信息-让我们将该脚本称为“master”。然后,您可以让您的所有要阻止的脚本“从机”对本地主机执行
fsockopen()
,然后设置它们,以便
fgets()
fwrite()
等将阻止,直到这些套接字上的数据可用

这并不是最有效的方法,因为您必须将IPC分包到TCP堆栈,但如果您想让它在Windoze上工作,就不能使用*nix域套接字,所以这就是您一直坚持的方法


我能想到的另一件事是,你可以做的是涉及一个临时文件和
flock()
,因为默认情况下,它将阻塞,直到它可以获得锁为止。这可能是最可移植的选项,因为自远古以来,
flock()
的行为在任何地方都是一样的,但它也可能(也可能不会)在作为ISAPI模块运行的PHP实例上工作(请参阅)。

返回键发生了什么?它离开是因为感觉不需要它吗-P你已经告诉我们你认为解决问题的方法是什么,但是如果你告诉我们这个问题,可能会有更好的方法。