【发布时间】:2015-09-28 16:01:34
【问题描述】:
我需要在linux上开发两个程序:cpp_prog是一个用c++写的小程序。它监视消息队列系统。一旦消息在队列系统中可用,程序就会下载消息,然后调用另一个 php 程序,比如 php_prog,来处理消息并从 php_prog 读取输出。当 php_prog 完成后,cpp_prog 将重新获得控制权并再次监听消息队列系统。这个过程将永远持续下去。
我的问题是如何将大数据从 c++ 传递到 php 并读取 php 程序的输出。
消息可能很长,所以c++中的系统调用system("php_prog message_string");不是一个好的选择。
我也尝试过使用 fifo。在 cpp_prog 中
int fifo = open(fifo_name.c_str(), O_WRONLY);
write(fifo, msg_string.c_str(), strlen(msg_string.c_str()));
close(fifo);
system("php_prog fifo_name"); //call php_prog with fifo name
在 php_prog 中:
$fifo = $argv[1];
var_dump($fifo);
$str_content = file_get_contents($fifo);
echo "here is msg\n";
var_dump($str_content);
echo "end\n";
但是 cpp_prog 被阻止,直到我从其他地方(例如终端)调用“php_prog fifo_name”来读取 fifo。
我愿意接受任何建议(但我真的会避免使用 tmp 文件)。如果能提供简单的代码就好了。
BR
【问题讨论】:
-
您是否考虑过编写一个 PHP 模块,它只从队列中弹出一个大对象并将其作为字符串返回给 PHP?除此之外,使用例如文件或共享内存是我会考虑的两种方法。甚至可以在共享内存之上使用 ZeroMQ 作为 IPC,以实现轻松扩展和快速原型设计。
-
感谢您的帮助。但是指定了使用c++获取消息和php解析的系统架构。很遗憾,我无法改变这一点。