使用LWP :: Agent的Perl JSON :: RPC :: Client
发布时间:2020-12-16 06:14:32 所属栏目:大数据 来源:网络整理
导读:我被要求不使用 JSON :: RPC :: Client,而是使用LWP来进行调用. 这是我的代码: 服务器: #!/usr/bin/perluse strict;use lib ".";use ServerLib;use JSON::RPC::Server::Daemon;die "Do Not run as Rootn" if($ == 0);print "Starting Daemonn";my $daemo
我被要求不使用
JSON :: RPC :: Client,而是使用LWP来进行调用.
这是我的代码: 服务器: #!/usr/bin/perl use strict; use lib "."; use ServerLib; use JSON::RPC::Server::Daemon; die "Do Not run as Rootn" if($< == 0); print "Starting Daemonn"; 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 => $messagen"; print "returning: $messagen"; 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 "$jsonn"; 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 "Failedn"; } 我看到两个客户端的服务器进程,但第二个客户端没有返回给它的数据. 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看到的响应字符串. 解决方法
这是一个棘手的问题.我的一个同事找到了它并且他不在Stackoverflow上,所以我将发布修复程序.
这个: my $object = { method => "echo",params => [@ARGV ] }; 需要的版本=> “1.1”,加入它成为: my $object = { method => "echo",params => [@ARGV],version => "1.1",}; 不知道为什么这很重要,但一旦它被添加它就像一个魅力. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |