2013-06-24 3 views
1

Étant donné le code ci-dessous, comment envoyer un message au client, via le WebSocket ouvert pour '/ wsinit', depuis Fu :: Bar :: dosomething?Utilisation de la Websocket Mojolicious

package Fu; 
use Mojo::Base 'Mojolicious'; 

sub startup 
{ 
    my $r = shift->routes; 

    $r->get('/')->to(controller => 'bar', action => 'init'); 

    $r->websocket('/wsinit')->to(controller => 'bar', action => 'wsinit'); 

    $r->get('/dosomething')->to(controller => 'bar', action => 'dosomething'); 
} 

1; 

# -- ^L 
# -- 

package Fu::Bar; 
use Mojo::Base 'Mojolicious::Controller'; 

sub init 
{ 
    my $self = shift; 
    $self->render(text => 'init'); 
} 
sub wsinit 
{ 
    my $self = shift; 
    $self->app->log->debug('Websocket opened.'); 
    $self->send({json => {fu => 'bar'}}); 
} 
sub dosomething 
{ 
    my $self = shift; 
} 

1; 

S'il vous plaît ne pas tenir compte du verbiage superflu suivant le but est de satisfaire aux exigences de détails stackoverflow/code qui me empêchez actuellement de poster ma question.

+0

Code dans quelle langue? Perl? –

+0

Oui, Perl, désolé. – user2502652

Répondre

2

Vous devrez vous connecter à la WebSocket via javascript dans le client-side code. Le code que vous avez ressemble devrait fonctionner pour l'envoi au client une fois la connexion établie.

#!/usr/bin/env perl 

use Mojolicious::Lite; 

any '/' => 'index'; 

websocket '/ws' => sub { 
    my $c = shift; 
    $c->send({ json => { foo => 'bar' } }); 
}; 

app->start; 

__DATA__ 

@@ index.html.ep 

<!DOCTYPE html> 
<html> 
<head> 
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script> 
</head> 
<body> 
    <p id="result"></p> 
    %= javascript begin 
    var ws = new WebSocket('<%= url_for('ws')->to_abs %>'); 
    ws.onmessage = function (e) { 
     $('#result').text(e.data) 
    }; 
    % end 
</body> 
</html> 

Si la question concerne la méthode dosomething, je ne comprends pas la question. Appelez-le comme une méthode dans l'action, ou bien connectez-le comme l'action pour une autre route. Si cela ne répond pas à la question, veuillez clarifier votre flux de travail de demande.

Questions connexes