use strict; use warnings; use utf8; use Amon2::Lite; use Digest::MD5 (); use Tatsumaki::MessageQueue; use Amon2::Web::Response::Callback; get '/' => sub { my $c = shift; return $c->render('index.tt'); }; my $mq = Tatsumaki::MessageQueue->instance('chat'); any '/post' => sub { my $c = shift; $mq->publish( { type => 'message', message => scalar($c->req->param('message')), } ); return $c->render_json({ok => 1}); }; any '/poll' => sub { my ($c) = @_; my $client_id = $c->req->param('client_id') or die; return $c->streaming_json(sub { my $writer = shift; $mq->poll_once($client_id, sub { $writer->write_json(\@_); $writer->close; }); }); }; # load plugins __PACKAGE__->load_plugin('Web::JSON'); __PACKAGE__->load_plugin('Web::Streaming'); __PACKAGE__->enable_middleware('AccessLog'); __PACKAGE__->enable_middleware('Lint'); __PACKAGE__->to_app(handle_static => 1); __DATA__ @@ index.tt WS

WS