我已經被要求不使用JSON :: RPC :: Client,而是使用LWP來完成調用。Perl JSON :: RPC ::客戶端使用LWP :: Agent
這裏是我的代碼:
服務器:
#!/usr/bin/perl
use strict;
use lib ".";
use ServerLib;
use JSON::RPC::Server::Daemon;
die "Do Not run as Root\n" if($< == 0);
print "Starting Daemon\n";
my $daemon = JSON::RPC::Server::Daemon->new(LocalPort => 8000);
$daemon->dispatch({'/jsonrpc/API' => 'ServerLib'})->handle();
exit;
模塊:
package ServerLib;
use base qw(JSON::RPC::Procedure); # Perl 5.6 or more than
use JSON;
use Data::Dumper;
use Sys::Hostname;
use Net::RabbitMQ;
use YAML qw(LoadFile);
use strict;
$| = 1;
my $VERSION = 0.2.0;
sub echo : Public(message:string) {
my ($s, $obj) = @_;
my $message = $obj->{'message'};
print "got message => $message\n";
print "returning: $message\n";
my $object = { message => $message,
foobar => "garbage" };
return $object;
}
package ServerLib::system;
sub describe {
{
sdversion => "0.1",
name => 'ServerLib',
};
}
1;
工作客戶:
#!/usr/bin/perl
use strict;
use JSON::RPC::Client;
use Data::Dumper;
my $client = new JSON::RPC::Client;
my $uri = 'http://localhost:8000/jsonrpc/API';
my $obj = {
method => 'echo', # or 'MyApp.sum'
params => ["my message"],
};
my $res = $client->call($uri, $obj);
if($res){
if ($res->is_error) {
print "Error : ", $res->error_message;
}
else {
print Dumper($res->result);
}
}
else {
print $client->status_line;
}
非工作客戶端:
#!/usr/bin/perl -w
use strict;
use JSON;
use LWP::Simple;
use Data::Dumper;
my $actionurl = "http://localhost:8000/jsonrpc/API";
my $ua = LWP::UserAgent->new();
$ua->agent("JSONClient/0.1");
my $object = { method => "echo",
params => [@ARGV ] };
my $json = to_json($object);
print "$json\n";
my $req = HTTP::Request->new(POST => $actionurl);
$req->content_type('application/json');
$req->content($json);
my $res = $ua->request($req);
if ($res->is_success)
{
print "Succeeded:\n" . Dumper($res->dump);
print "DUmp: ". $res->dump;
my $result = to_json($res->content);
}
else
{
print "Failed\n";
}
我看到兩個客戶端的服務器進程,但第二個客戶端沒有數據返回給它。
DUmp: HTTP/1.1 200 OK
Connection: close
Date: Tue, 03 Jan 2012 18:24:24 GMT
Server: libwww-perl-daemon/5.827
Content-Type: application/json; charset=UTF-8
Client-Date: Tue, 03 Jan 2012 18:24:24 GMT
Client-Peer: 127.0.0.1:8000
Client-Response-Num: 1
(no content)
有人看到我失蹤了嗎?它應該非常簡單,但由於某種原因,我找不到像RPC :: Client所看到的響應字符串。
爲什麼不能使用[JSON :: RPC :: Client](http://p3rl.org/JSON::RPC::Client)或[JSON :: RPC :: LWP](http:// p3rl.org/JSON::RPC::LWP)? – 2012-01-03 19:45:28
他們不想在他們的客戶端機器上安裝額外的庫 – 2012-01-03 21:22:11
然後只是將它們捆綁在一起,好像它們是項目中的文件**完成**。 – 2012-01-03 21:26:35