1

我试图让我的 Perl Frontier XML-RPC 守护进程了解调用者的 IP 地址。我不得不说我是 Perl 的新手,所以也许这很明显。我知道Frontier::Daemon继承自IO::Socket::INET,它有一个peeraddr()方法,但是当守护进程没有将自己的实例传递给 XML-RPC 方法调用时,这对我没有帮助。

这是我的代码大致的样子:

    my $server = Frontier::Daemon->new(
        methods => {
                diff => \&diff,
        },
        LocalPort => 8080,
        ReuseAddr => 1,
    );

然后在下面:

sub diff {
    return $_[0] - $_[1];
}

如何从“diff”中获取呼叫者的 IP 地址?

4

2 回答 2

1

不幸的是,你不能使用 Frontier 的服务器类来做到这一点。在调用本地过程/方法时,您对实际的套接字连接本身没有任何句柄。

碰巧的是,能够访问这些信息是我最近添加到我的RPC::XML包中的服务器类的一个特性。请参阅服务器类文档中的“如何调用方法”部分。

于 2009-01-21T21:07:57.267 回答
0

我同时运行 Frontier::Daemon 和 Frontier::RPC2(在 Apache 下)。我不知道在使用 Frontier::Daemon 时如何获取客户端 IP,但如果您使用 Frontier::RPC2,那么 Apache 环境变量 $ENV{REMOTE_ADDR} 将包含客户端的 IP 地址。

于 2009-01-21T15:30:29.740 回答