我正在努力理解JSON RPC的概念,以及它在Perl中的实现。尽管我可以找到很多Python/Java的示例,但是对于Perl,惊讶地发现几乎没有任何示例。
我正在按照这个示例进行学习,但不确定它是否完整。我想要的示例是将两个整数相加。现在,我已经设置了一个非常基本的HTML页面,如下所示:
接下来,基于上面的例子,我有三个文件: test1.pl
我正在按照这个示例进行学习,但不确定它是否完整。我想要的示例是将两个整数相加。现在,我已经设置了一个非常基本的HTML页面,如下所示:
<html>
<body>
<input type="text" name="num1"><br>
<input type="text" name="num2"><br>
<button>Add</button>
</body>
</html>
接下来,基于上面的例子,我有三个文件: test1.pl
# Daemon version
use JSON::RPC::Server::Daemon;
# see documentation at:
# https://metacpan.org/pod/distribution/JSON-RPC/lib/JSON/RPC/Legacy.pm
my $server = JSON::RPC::Server::Daemon->new(LocalPort => 8080);
$server -> dispatch({'/test' => 'myApp'});
$server -> handle();
test2.pl
#!/usr/bin/perl
use JSON::RPC::Client;
my $client = new JSON::RPC::Client;
my $uri = 'http://localhost:8080/test';
my $obj = {
method => 'sum', # or 'MyApp.sum'
params => [10, 20],
};
my $res = $client->call( $uri, $obj );
if($res){
if ($res->is_error) {
print "Error : ", $res->error_message;
} else {
print $res->result;
}
} else {
print $client->status_line;
}
myApp.pl
package myApp;
#optionally, you can also
use base qw(JSON::RPC::Procedure); # for :Public and :Private attributes
sub sum : Public(a:num, b:num) {
my ($s, $obj) = @_;
return $obj->{a} + $obj->{b};
}
1;
虽然我知道这些文件各自是做什么的,但当它们合并在一起并使它们协同工作时,我完全不知所措。
我的问题如下:
- HTML页面中的按钮是否位于
<form>
标签内(就像我们通常在基于CGI的程序中所做的那样)?如果是,那么它会调用哪个文件?如果不是,那么我该如何传递要添加的值? - 这3个Perl文件的执行顺序是什么?哪一个调用了哪一个?执行流程是怎样的?
- 当我尝试从CLI运行perl文件,即使用 $./test2.pl,我得到了以下错误:Error 301 Moved Permanently。移动了什么?它试图访问哪个文件?我尝试从
/var/www/html
和/var/www/html/test
内运行文件。
希望能帮助您理解其中的细微差别。提前感谢!