2013-06-24 4 views
1

아래 코드가 주어지면 Fu :: Bar :: dosomething에서 '/ wsinit'으로 열린 websocket을 통해 클라이언트에게 어떻게 메시지를 보내나요? Mojolicious websocket 사용

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; 

, 현재 나의 질문을 게시에서 저를 방해하고 있습니다 유래의 세부/코드 요구 사항을 만족입니다 목적있는 다음과 같은 불필요한 말씨를 무시하십시오.

+0

어떤 언어로 된 코드입니까? 펄? –

+0

예, Perl, 죄송합니다. – user2502652

답변

2

client-side code의 javascript를 통해 websocket에 연결해야합니다. 연결이 설정되면 클라이언트에 보내는 코드가 작동하는 것처럼 보이는 코드입니다. 질문이 dosomething 방법에 대해 경우

#!/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> 

, 내가 질문을 이해하지 않습니다. 액션의 메소드로 호출하거나 다른 경로의 액션으로 연결하십시오. 그래도 문제가 해결되지 않으면 요청 워크 플로를 명확히하십시오.

관련 문제