Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl Mojolicous&;Socket.IO不';我打得不好_Perl_Websocket_Mojolicious_Mojo - Fatal编程技术网

Perl Mojolicous&;Socket.IO不';我打得不好

Perl Mojolicous&;Socket.IO不';我打得不好,perl,websocket,mojolicious,mojo,Perl,Websocket,Mojolicious,Mojo,我试图用Socket.IO和Perl的Mojolicious进行实验。虽然我能够在WebSockets上执行相同的操作,但我尝试在Socket.IO上执行相同的操作(由于我需要更广泛的浏览器支持),但效果不佳 我正在使用Morbo服务器。代码是: #!/usr/bin/env perl use Mojolicious::Lite; get '/' => sub { my $self = shift; $self->render('index'); }; webs

我试图用Socket.IO和Perl的Mojolicious进行实验。虽然我能够在WebSockets上执行相同的操作,但我尝试在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>
响应:

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
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)
使用WebSocket时,我从客户端收到的请求如下:

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没有请求套接字升级? 此外,Mojo不知道这条路线:

/socket.io/1
我还尝试替换:

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

使用
io.connect('http://localhost:300/echo');

在我看来,来自cdn的文件正在从您的服务器请求应该来自cdn的文件。我猜还需要额外的配置。

我认为socket.io是一个节点应用程序。我一直不得不为我的mojo应用程序使用股票websocket api