Distributed programming: Difference between revisions
Content added Content deleted
(→{{header|Go}}: add Thrift) |
No edit summary |
||
Line 1,167: | Line 1,167: | ||
send_data('some_host', { a=>100, b=>[1 .. 10] }); |
send_data('some_host', { a=>100, b=>[1 .. 10] }); |
||
}</lang> |
}</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}}== |
=={{header|PicoLisp}}== |
||
===Server=== |
===Server=== |