作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
想象进程间通信
+--------------+ +------------+
| main_process | ==produces data somewhat to=> | monitoring |
+--------------+ +------------+
哪里:
main_process
不停地运行 并为 monitoring
生成一些数据monitoring
只是有时运行,当它运行时它应该读取 main_process
产生的数据monitoring
未运行 main_process
生成的数据不应该被保存。问题是:如何写出像“按需”的IPC?
main_process
的代码基本就是下一个(真正的比较复杂):
use 5.014;
use warnings;
my $box = new BlackBox( callback => sub {
my ($self, $jref) = @_;
#
# processing of $jref
#
});
$box->run();
callback
每 2-5 秒调用一次,正如我上面所说,此过程应该不间断运行。我无法更改 BlackBox。
我需要:
processing of $jref
部分 - 应该发送什么 $jref
到某处monitoring
进程本身,什么应该读取数据,什么时候运行...不需要任何代码,只需要一些指向正确方向的指针,或者知道如何做到这一点,而不会填满我的内存或硬盘,所以最简单的方法:
monitoring
时填满我的硬盘。没有运行。如果有人关心,$jref
是对 json 字符串的引用,所以我可以这样做:
use JSON::XS qw(decode_json):
my $perlref = decode_json($$jref);
最佳答案
我的第一个想法是“UDP 到本地主机?”
该想法的变体包括 AF_UNIX 或命名管道。使用流套接字,您将执行非阻塞连接,而使用管道,您将执行 O_WRONLY|O_NONBLOCK,如果您获得 EAGAIN,则无需写入即可返回。
您可以保存您的文件句柄并在多个调用中重复使用它,如果您得到 EPIPE
,只需关闭它并重新打开它。您需要 $SIG{PIPE}='IGNORE';
希望黑匣子不会反对。
读取方面就像 cat $path_to_fifo
或 nc -l -u -p $udpport
一样简单,如果您使用 AF_UNIX 套接字,则稍微困难一些。
关于perl - 与 perl 的按需进程间通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12245788/
我是一名优秀的程序员,十分优秀!