NAME

Dancer::Plugin::WebSocket - A Dancer plugin for easily creating WebSocket apps

VERSION

version 0.0001

SYNOPSIS

# ./bin/app.pl
use Dancer;
use Dancer::Plugin::WebSocket;

get '/' => sub { template 'index' };

any '/send_msg' => sub {
    my $msg = params->{msg};
    websocket_send($msg);
    return "sent $msg\n";
};

dance;

# ./views/index.tt
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script>
var socket;
$(function() {
    // ws_path should be of the form ws://host/_hippie/ws
    var ws_path = "ws:<% request.base.opaque %>_hippie/ws";
    socket = new WebSocket(ws_path);
    socket.onopen = function() {
        $('#connection-status').text("Connected");
    };
    socket.onmessage = function(e) {
        var data = JSON.parse(e.data);
        if (data.msg)
            alert (data.msg);
    };
});
function send_msg(message) {
    socket.send(JSON.stringify({ msg: message }));
}
</script>
</head>
<body>
Connection Status: <span id="connection-status"> Disconnected </span>
<input value="Send Message" type=button onclick="send_msg('hello')" />
</body>
</html>

# Run app with Twiggy
plackup -s Twiggy bin/app.pl

# Visit http://localhost:5000 and click the button or interact via curl:
curl http://localhost:5000/send_msg?msg=hello

DESCRIPTION

This plugin provides the keyword websocket_send, which takes 1 argument, the message to send to the websocket. This plugin is built on top of Web::Hippie, but it abstracts that out for you. You should be aware that it registers 2 routes that Web::Hippie needs: get('/new_listener') and get('/message'). Be careful to not define those routes in your app. This requires that you have Plack and Web::Hippie installed. It also requires that you run your app via Twiggy. I'm not sure why. For example:

plackup -s Twiggy bin/app.pl

AUTHORS

  • Naveed Massjouni <naveedm9@gmail.com>

  • Franck Cuny <franck@lumberjaph.net>

COPYRIGHT AND LICENSE

This software is copyright (c) 2010 by Naveed Massjouni.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.