POE::Component::Server::JSONRPC(3) 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_input_handler

poe_result

poe_error

poe_send

Should be defined in Http or Tcp

AUTHOR

Daisuke Murase <[email protected]> Come BERNIGAUD <[email protected]>

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.