Distributed programming: Difference between revisions

no edit summary
(→‎{{header|Go}}: add Thrift)
No edit summary
Line 1,167:
send_data('some_host', { a=>100, b=>[1 .. 10] });
}</lang>
=={{header|Perl 6}}==
Server listens for JSON encoded messages. It processes requests for set|get|dump. 'set' stores a message, 'get' returns message, 'dump' returns all stored messages. Optional parameters for ip address and port.
 
Server.p6:
<lang perl6>./server.p6 --usage
Usage:
server.p6 [--server=<Any>] [--port=<Any>]</lang>
<lang perl6>#!/usr/bin/env perl6
use JSON::Fast ;
sub MAIN( :$server='0.0.0.0' , :$port=3333 ) {
my %db ;
react {
whenever IO::Socket::Async.listen( $server , $port ) -> $conn {
whenever $conn.Supply.lines -> $line {
my %resonse = 'status' => '' ;
my $msg = from-json $line ;
say $msg.perl ;
if $msg{"function"} eq "set" {
%db{ $msg<topic> } = $msg<message> ;
%resonse<status> = 'ok' ;
}
if $msg{"function"} eq 'get' {
%resonse<topic> = $msg<topic> ;
%resonse<message> = %db{ $msg<topic> } ;
%resonse<status> = 'ok' ;
}
if $msg{"function"} eq 'dump' {
%resonse = %db ;
}
$conn.print( to-json(%resonse, :!pretty) ~ "\n" ) ;
LAST { $conn.close ; }
QUIT { default { $conn.close ; say "oh no, $_";}}
CATCH { default { say .^name, ': ', .Str , " handled in $?LINE";}}
}
}
}
}</lang>
client.p6:
<lang perl6>Usage:
client.p6 [--server=<Any>] [--port=<Any>] [--json=<Any>] set <topic> [<message>]
client.p6 [--server=<Any>] [--port=<Any>] get <topic>
client.p6 [--server=<Any>] [--port=<Any>] dump</lang>
<lang perl6>#!/usr/bin/env perl6
use JSON::Fast ;
multi MAIN('set', $topic, $message='', :$server='localhost', :$port='3333', :$json='') {
my %msg = function => 'set' , topic=> $topic , message=> $message ;
%msg{"message"} = from-json( $json ) if $json ;
sendmsg( %msg , $server, $port) ;
}
multi MAIN('get', $topic, :$server='localhost', :$port='3333') {
my %msg = function => 'get' , topic=> $topic ;
sendmsg( %msg , $server, $port) ;
}
multi MAIN('dump', :$server='localhost', :$port='3333') {
my %msg = function => 'dump' ;
sendmsg( %msg , $server, $port) ;
}
sub sendmsg( %msg , $server, $port){
my $conn = await IO::Socket::Async.connect( $server , $port );
$conn.print: to-json( %msg,:!pretty)~"\n";
react {
whenever $conn.Supply -> $data {
print $data;
$conn.close;
}
}
}</lang>
examples:
<lang perl6>./client.p6 set version perl6
{"status": "ok"}
./client.p6 get version
{"status": "ok","topic": "version","message": "perl6"}
./client.p6 --json='["one","two","three"]' set mylist
{"status": "ok"}
./client.p6 dump
{"version": "perl6","mylist": ["one","two","three"]}
 
server output:
${:function("set"), :message("perl6"), :topic("version")}
${:function("get"), :topic("version")}
${:function("set"), :message($["one", "two", "three"]), :topic("mylist")}
${:function("dump")}
</lang>
=={{header|PicoLisp}}==
===Server===
8

edits