我编写了一个服务器模块,用于使用JSON :: RPC :: Server,并尝试导入多个包(使用use
)。这是Server.pl
文件的代码:
#!/usr/bin/perl
use JSON::RPC::Server::Daemon;
use add2Num;
JSON::RPC::Server::Daemon->new(LocalPort => 42337)
->dispatch({'/jsonrpc/API' => 'add2Num'})
->handle();
这很好用。但是,我想导入(use
)另一个文件,比方说,减法。我尝试过以下两种方式重写服务器模块:
#!/usr/bin/perl
use JSON::RPC::Server::Daemon;
use add2Num;
use sub2Num;
JSON::RPC::Server::Daemon->new(LocalPort => 42337)
->dispatch({'/jsonrpc/API' => 'add2Num'})
->dispatch({'/jsonrpc/API' => 'sub2Num'})
->handle();
和
#!/usr/bin/perl
use JSON::RPC::Server::Daemon;
use add2Num;
use sub2Num;
JSON::RPC::Server::Daemon->new(LocalPort => 42337)
->dispatch({'/jsonrpc/API' => 'add2Num', 'sub2Num'})
->handle();
当我尝试访问用sub2Num
编写的减法函数时,这两个都给我一个“过程错误”。我按this link了解dispatch
的语法。有人可以告诉我我的错误吗?
答案 0 :(得分:1)
在查看code for the module(好吧,差不多)之后,我认为你的假设是正确的。您不能有两个模块用于相同的路径。
elsif (ref $arg[0] eq 'HASH') { # Lazy loading
for my $path (keys %{$arg[0]}) {
my $pkg = $arg[0]->{$path};
$self->{dispatch_path}->{$path} = $pkg;
}
}
它将在dispatch中接受多个键/值对的路径和模块,因此不需要两次调用dispatch。但它只允许每个路径一个模块。您使用dispatch
对sub2Num
的第二次调用覆盖了先前设置的add2Num
。
如果不尝试任何此类方法,我会看到一些解决方案:
dispatch(['add2Num', 'sub2Num')
并找出设置守护程序绑定路径的位置(最有可能)add2Num
和sub2Num
以合并它们dispatch({'/jsonrpc/API' => 'combinedNum})