Skip to content

Instantly share code, notes, and snippets.

@kraih
Created November 1, 2011 06:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save kraih/1330053 to your computer and use it in GitHub Desktop.
Save kraih/1330053 to your computer and use it in GitHub Desktop.
#!/usr/bin/env perl
use Mojolicious::Lite;
# Documentation under "/perldoc"
plugin 'PODRenderer';
# Template with browser-side code
get '/' => 'index';
# WebSocket log service
websocket '/log' => sub {
my $self = shift;
# Subscribe to "message" event of Mojo::Log
my $cb = $self->app->log->on(message => sub {
my ($log, $level, @message) = @_;
# Send message via WebSocket
$self->send("[$level] @message");
});
# Unsubscribe again from "message" event of Mojo::Log
$self->on(finish => sub {
my $self = shift;
$self->app->log->unsubscribe(message => $cb);
});
};
app->start;
__DATA__
@@ index.html.ep
<!doctype html><html>
<head><title>Mojolicious Log</title></head>
<body>
<%= link_to 'New window' => '/perldoc', target => '_blank' %>
<br/>
<script>
// This needs a "Moz" prefix to work in Firefox
var ws = new WebSocket('<%= url_for('log')->to_abs %>');
// Incoming WebSocket messages
ws.onmessage = function(event) {
document.body.innerHTML += event.data + '<br/>';
};
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment