如何在PHP之间使用不同函数甚至不同进程的不同进程的命名管道?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何在PHP之间使用不同函数甚至不同进程的不同进程的命名管道?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2357字,纯文字阅读大概需要4分钟。
内容图文
![如何在PHP之间使用不同函数甚至不同进程的不同进程的命名管道?](/upload/InfoBanner/zyjiaocheng/950/305e880414e64e66bf81dd091162438d.jpg)
我想写一个Ajax Web应用程序,一个特定的游戏.两个Web客户端必须通过PHP服务器相互通信.我解决这个问题的方法是在客户端和服务器以及服务器和客户端之间使用Ajax.每个客户端使用Ajax创建一个单独的服务器进程.我希望这两个服务器进程通过MySQL和命名管道进行通信.我需要命名管道来获得整个应用程序的即时响应.
我不能使用一个服务器进程,它首先创建一个管道,然后分叉成两个使用管道的进程. Web应用程序在Web浏览器发送请求时创建服务器进程.所以,我需要命名管道,其中每个进程都不知道命名管道的文件名.他们无法交换文件句柄(至少我不知道如何).
我的问题是PHP方式的命名管道确实可以正常工作
在同一函数中使用:
public function writeAndReadPipe_test(){
$pipeA = fopen("testpipe",'r+');
fwrite($pipeA, 'ABCD');
$pipeB = fopen("testpipe",'r+');
$content = fread($pipeB, 4);
echo "[" . $content . "]<br>\n";
}
public function testingPipes_same_function(){
posix_mkfifo("testpipe", 0777);
$this->writeAndReadPipe_test();
}
但是,当我使用不同的函数时,fread($pipeB,4)命令会阻止整个应用程序:
public function writePipe_test(){
$pipeA = fopen("testpipe",'r+');
fwrite($pipeA, 'ABCD');
}
public function readPipe_test(){
$pipeB = fopen("testpipe",'r+');
$content = fread($pipeB, 4);
echo "[" . $content . "]<br>\n";
}
public function testingPipes_different_functions(){
posix_mkfifo("testpipe", 0777);
$this->writePipe_test();
$this->readPipe_test();
}
有人知道为什么吗?我能做些什么才能让它在第一步中的不同功能之间起作用?在第二步中,它应该在不同的进程之间工作!我发现当编写器在读取器读取之前关闭管道时,我也遇到了问题
它.我想该函数在结束时自动关闭它,但这只是猜测.
如果PHP方式不起作用,我打算让PHP打开命令行,生成BASH命令并执行它们.只要我的Web服务器在LAMP环境中工作,这应该适用于任何情况.缺点是它不适用于WAMP环境.
那么,有人对此有什么想法吗?
P.S:
我需要阻塞管道让读者等到事件发送完毕.我知道管道可以使用非阻塞模式工作
stream_set_blocking($pipe,false);
左右,但是整个想法是在没有使用管道进行轮询的情况下进行此操作
一旦事件被解雇,读者就会被提起.
解决方法:
当你在像这样的单独函数中使用管道时,写管道A似乎再次被关闭/丢弃($pipeA的本地范围).假设管道必须打开以进行读取和/或写入以保留任何信息,这实际上是有意义的.虽然我不知道内在的魔力.
当您从另一个进程(例如echo magic>> testpipe)提供管道时,您还可以观察到阻塞的读取调用成功.所以你已经完成了第2步,但是你需要一些管道处理.
如果你改变它如下,它的工作:
private $pipeA;
public function writePipe_test(){
$this->pipeA = fopen("testpipe",'r+');
fwrite($this->pipeA, 'ABCD');
}
编辑:或设置$pipeA以具有全局范围,就此而言..
内容总结
以上是互联网集市为您收集整理的如何在PHP之间使用不同函数甚至不同进程的不同进程的命名管道?全部内容,希望文章能够帮你解决如何在PHP之间使用不同函数甚至不同进程的不同进程的命名管道?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。