2013-11-23 3 views
4

내가 Socket.IO 펄의 Mojolicious 실험을 시도하고 있었다 재생되지 않습니다. 웹 소켓Socket.IO (내가 필요한 브라우저 지원이 더 많아서) 잘 수행되지 못했습니다.펄 Mojolicious & Socket.IO 잘

나는 Morbo 서버를 사용하고 있습니다. 코드는 다음과 같습니다

#!/usr/bin/env perl 
use Mojolicious::Lite; 

get '/' => sub { 
    my $self = shift; 

    $self->render('index'); 
}; 

websocket '/echo' => sub { 
    my $self  = shift; 
    state $counter = 1; 

    $self->res->headers->header('Access-Control-Allow-Origin' => "*"); 
    Mojo::IOLoop->recurring(1.5 => sub { 
      my $loop = shift; 
      $self->send(sprintf("Websocket request: %d\n",$counter++)); 

    }); 
}; 

app->start; 

__DATA__ 
@@ index.html.ep 
<!DOCTYPE html> 
<html> 
    <head> 
    <title>Socket.IO test</title> 
    <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script> 
    <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/socket.io/0.9.16/socket.io.min.js"></script> 
    </head> 
    <body> 
    <div id="dumper"></div> 
<script> 
    var ws = new WebSocket('<%= url_for('echo')->to_abs %>'); 

    ws.onmessage = function(e) { 
     var message = e.data; 
     console.log(message); 
     $("#dumper").text(message); 
    }; 
// var socket = io.connect('<%= url_for('echo')->to_abs %>'); 
// socket.on('data', function (data) { 
// console.log(data); 
// }); 
</script> 


    </body> 
</html> 

나는 Socket.IO 부분의 주석을 해제 할 때 (웹 소켓가), 그것은 다음과 같은 오류와 함께 io.connect(...)에 실패하는이 코드의 일부 작업도 (헤더 및 응답) :

요청 :

GET /socket.io/1/?t=1385234823089 HTTP/1.1 
Host: 127.0.0.1:3000 
Connection: keep-alive 
Cache-Control: max-age=0 
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.63 Safari/537.31 
Accept: */* 
Referer: http://127.0.0.1:3000/ 
Accept-Encoding: gzip,deflate,sdch 
Accept-Language: en-US,en;q=0.8 
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3 

응답 :

GET ws://127.0.0.1:3000/echo HTTP/1.1 
Pragma: no-cache 
Origin: http://127.0.0.1:3000 
Host: 127.0.0.1:3000 
Sec-WebSocket-Key: zgob5gss5XTr9vzYwYNe+A== 
Upgrade: websocket 
Sec-WebSocket-Extensions: x-webkit-deflate-frame 
Cache-Control: no-cache 
Connection: Upgrade 
Sec-WebSocket-Version: 13 

가 소켓에 대한 Socket.IO doenst 요청을 업그레이드하는 것이 보인다

HTTP/1.1 404 Not Found 
Connection: keep-alive 
Content-Type: text/html;charset=UTF-8 
Date: Sat, 23 Nov 2013 19:27:03 GMT 
Content-Length: 6163 
Server: Mojolicious (Perl) 

웹 소켓를 사용하는 동안 나는 클라이언트에서 얻는 요청이 무엇입니까? 또한, 모조는이 경로를 인식하지 못합니다 :

/socket.io/1 

나는 또한 교체 시도 :

io.connect('<%= url_for('echo')->to_abs %>'); 

그것은 CDN에서 파일처럼 나에게 보이는

답변

1

io.connect('http://localhost:300/echo');로 파일을 요청 당신의 서버는 cdn에서오고 있어야합니다. 내 생각 엔 추가 구성이 필요하다는 것입니다.

0

socket.io는 노드 응용 프로그램이라고 생각합니다. 나는 항상 내 mojo 애플 리케이션을위한 주식 websocket api와 함께 가야만했다.