Gen*_* S. 3 sockets perl signals
问题:scriptA.cgi处于无限循环中并处理打开的套接字到Flash客户端.scriptB.cgi从Web调用,执行它需要做的事情,然后需要通知scriptA向客户端发送消息.
这可能吗?我坚持如何让scriptB识别坐在那里与socket连接的scriptA实例,而不是启动它自己的一个.
所有的想法都赞赏
如果通信需求很简单,这是一个很好的信号应用.
编辑以存储来自scriptA的进程ID并在scriptB中读取它 - 脚本A和B必须就名称达成一致.
# script B
do_scriptB_job();
if (open(my $PID_FILE, "<", "scriptA.pid.file")) {
$process_id_for_scriptA = <$PID_FILE>;
close $PID_FILE;
kill 'USR1', $process_id_for_scriptA; # makes scriptA run the SIGUSR1 handler
}
# script A
open(my $PID_FILE, ">", "scriptA.pid.file");
print $PID_FILE $$;
close $PID_FILE;
my $signaled = 0;
$SIG{"USR1"} = \sub { $signaled = 1 } # simple SIGUSR1 handler, set a variable
while ( in_infinite_loop ) {
if ($signaled) {
# this block runs only if SIGUSR1 was received
# since last time this block was run
send_a_message_to_the_client();
$signaled = 0;
} else {
do_something_else();
}
}
unlink "scriptA.pid.file"; # cleanup
Run Code Online (Sandbox Code Playgroud)
当脚本A收到SIGUSR1
信号时,脚本将被中断以运行USR1
信号处理程序,设置$signaled
.然后执行线程将恢复,脚本可以使用该信息.