草庐IT

php - 如何进行非阻塞 php exec 调用?

我需要将文本回显到Linux中的命名管道(FIFO)。即使我在后台运行“&”并将所有输出重定向到/dev/null,shell_exec调用始终会阻塞。这个问题在整个互联网上有很多答案,它们基本上都指向以下php手册部分:Ifaprogramisstartedwiththisfunction,inorderforittocontinuerunninginthebackground,theoutputoftheprogrammustberedirectedtoafileoranotheroutputstream.FailingtodosowillcausePHPtohanguntilth

php - 如何以非阻塞方式在 PHP 中休眠?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:HowcanIstopPHPsleep()affectingmywholePHPcode?PHP:Outputdatabeforeandaftersleep()?我在本地主机中有一个php代码,它回显数据并在两者之间休眠。在客户端,我能够及时看到接收到的数据并进行渲染。$condition=true;while($condition){$data=get_some_data();//maynotfetchnewdatatobesent,eachiteration.echo$data;ob_flush();$i

php - 将大文件上传到服务器(非阻塞)

所以我正在开发一个需要与4d应用程序通信的php应用程序。4d应用程序使用SOAP网络服务进行外部通信。SOAP网络服务具有启用文件上传到4d应用程序的功能。由于4d应用程序web服务的文件上传功能的破坏性,我们实现了一个进度条来将文件上传到web服务器,然后在成功后尝试将文件发送到4d应用程序服务器。但对于客户端来说,这并不好,因为该人需要等待初始文件上传到服务器,然后在执行文件上传功能时再次将文件从Web服务器传输到4d应用程序的服务器。我的问题是,有什么方法可以以非阻塞方式处理文件上传吗?甚至可能一起绕过SOAP函数。更新:我在想也许可以使用RabbitMQ之类的东西对每个文件上

PHP 非阻塞 soap 请求

用户在我的网站上注册后,我需要以不阻塞用户的方式发送soap请求。如果soap服务器运行缓慢,我不希望最终用户不得不等待它。有没有一种方法可以发送请求并让我的主要PHP应用程序继续运行而无需等待soap服务器的响应?如果没有,是否有办法在soap请求上设置最大超时,并在请求大于最大超时时处理功能?编辑:理想情况下,我希望通过请求的最大超时来处理这个问题。我有以下内容://ini_set('default_socket_timeout',1);$streamOptions=array('http'=>array('timeout'=>0.01));$streamContext=strea

PHP 运行非阻塞系统调用

如何在PHP中运行非阻塞系统调用?系统调用将调用由第二个PHP脚本运行的流服务。所以我的页面会等待这个调用。我对解决方案的两个想法:1:存在非阻塞执行系统调用的native方法/参数2:在一个新的C++程序上运行system(),然后该程序将在9月fork自身并运行实际的php脚本。线程是否有以非阻塞方式执行系统调用的native方法,或者我是否需要绕过这个...我目前有shell_exec('nohupphp/path/to/file.php&')但它仍然有效 最佳答案 来自PHPmanual:Ifaprogramisstarte

php - 对 PHP 的非阻塞 Ajax 请求

我正在使用PHP从远程服务器下载一个(大)文件,此下载是通过单击网页上的下载按钮触发的。因此,当我单击网页上的下载按钮时,就会向PHP函数。该函数使用cURL触发下载。与此同时,我想使用Ajax向我的PHP站点发出其他请求。但是只要下载正在进行,所有其他Ajax请求都会显示状态Pending。所以基本上下载会阻止对PHP的所有其他请求。有什么办法可以避免这种阻塞? 最佳答案 这很可能是由于session文件被锁定所致。这是许多基于php的网络应用程序的一个非常普遍的疏忽。本质上,当您调用session_start()访问$_SESS

php - 从另一个内部生成一个 PHP 脚本。非阻塞

我有一个PHP脚本,需要从另一个PHP网页中执行。但是,要使第二个正常运行,第一个需要完全完成。本质上,我需要第一页为第二个脚本生成一个新的进程/线程,该脚本将在开始前等待1秒。执行include会导致阻塞,这会阻止它工作,我无法让它开始使用exec编辑:应该已经澄清了。这些页面没有输出,也没有通过Web界面进行交互。所有页面都由来自另一台服务器的POST请求调用。编辑2:解决方法:让请求页面的服务器在第一个页面返回1秒后直接向第二个页面发送请求。 最佳答案 proc_open是正确的选择,正如@ChristopherMorriss

php - 通过 SSL 的非阻塞套接字连接?

是否可以在非阻塞模式下通过SSL使用socket_create/socket_connect?我目前正在使用原生支持“ssl://”前缀的\fsockopen()。但是,fsockopen()将阻塞直到建立连接。这在可能有大约50个同步套接字等待读取的脚本中是不可取的。我已经创建了一个测试脚本来使用\socket_create(),它可以在调用\socket_connect()之前切换到非阻塞模式。但是,它似乎不支持SSL连接(与fsockopen()包装器不同)。 最佳答案 答案是使用带有标志STREAM_CLIENT_ASYNC

java - 使用非阻塞架构管理 DTLS

我正在尝试在我当前基于Netty的服务器中添加DTLS支持。Netty让我有可能将处理程序添加到管道中,在管道中数据包按定义的顺序处理,并在需要更改时更改。BouncyCaSTLe对TLS和DTLS的支持目前仅限于与“旧”阻塞I/O一起使用。这使得很难(也许不可能)将BC与非阻塞NIO框架(如Netty)一起使用。有谁知道可以与Netty等非阻塞框架一起使用的任何DTLS实现,或者是否有可能的解决方法来使常规加密库(例如BouncyCaSTLe)在这种情况下工作?谢谢。 最佳答案 有一个pullrequest对于使用非阻塞API实现

java - 并发/非阻塞控制台键盘输入

我正在用Java开发MUD。我每次都读取播放器输入,但我使用的是Scanner,它使用阻塞操作。我想要非阻塞输入。我看过nio包,它有一个Selector类,但我不确定如何将它用于System.in。我想一旦我运行服务器我肯定会需要它,但现在一切都处于离线状态。我已经尝试从Applet扩展主类并覆盖keyDown,但这只是意味着在第一个输入之后不再接受输入。当然,我不再阻止任何东西,但是没有更多的输入。keyDown我猜再也没有被调用过。也许线程即使在执行阻塞操作时也可以被中断?感谢您对此问题的任何见解。 最佳答案 你不能用系统控制