NAME¶
POE::Component::Server::JSONRPC - POE tcp or http based JSON-RPC server
SYNOPSIS¶
#http version:
POE::Component::Server::JSONRPC::Http->new(
Port => 3000,
Handler => {
'echo' => 'echo',
'sum' => 'sum',
},
SslKey => '/path/to/the/server.key',
SslCert => '/path/to/the/server.crt',
Authenticate => \&authentication_handler,
# authentication_handler must be a function that takes two parameters login and password,
# and returns true if connection is successful, false otherwise
);
#tcp version:
POE::Component::Server::JSONRPC::Tcp->new(
Port => 3000,
Handler => {
'echo' => 'echo',
'sum' => 'sum',
},
);
sub echo {
my ($kernel, $jsonrpc, $id, @params) = @_[KERNEL, ARG0..$#_ ];
$kernel->post( $jsonrpc => 'result' => $id, @params );
}
sub sum {
my ($kernel, $jsonrpc, $id, @params) = @_[KERNEL, ARG0..$#_ ];
$kernel->post( $jsonrpc => 'result' => $id, $params[0] + $params[1] );
}
DESCRIPTION¶
This module is a POE component for tcp or http based JSON-RPC Server.
The specification is defined on
http://json-rpc.org/ and this module use
JSON-RPC 1.0 spec (1.1 does not cover tcp streams)
METHODS¶
new¶
Create JSONRPC component session and return the session id.
Parameters:
- Port
- Port number for listen.
- Handler
- Hash variable contains handler name as key, handler poe state name as
value.
Handler name (key) is used as JSON-RPC method name.
So if you send {"method":"echo"}, this module call the
poe state named "echo".
HANDLER PARAMETERS¶
- ARG0
- A session id of PoCo::Server::JSONRPC itself.
- ARG1
- The id of the client you're treating, send that back in result/error.
- ARG2 .. ARGN
- JSONRPC argguments
ex) If you send following request
{"method":"echo", "params":["foo", "bar"]}
then, "echo" handler is called and parameters is that ARG0 is
component session id, ARG1 is client id, ARG2 "foo", ARG3
"bar".
HANDLER RESPONSE¶
You must call either "result" or "error" state in your
handlers to response result or error.
ex:
$kernel->post( $component_session_id => "result" => $client_id, "result value" )
$component_session_id is ARG0 in handler. If you do above, response is:
{"result":"result value", "error":""}
POE METHODS¶
Inner method for POE states.
poe__start¶
poe_init_server¶
Should be defined in Http or Tcp
poe_result¶
poe_error¶
poe_send¶
Should be defined in Http or Tcp
AUTHOR¶
Daisuke Murase <typester@cpan.org> Come BERNIGAUD
<come.bernigaud@laposte.net>
COPYRIGHT¶
This program is free software; you can redistribute it and/or modify it under
the same terms as Perl itself.
The full text of the license can be found in the LICENSE file included with this
module.