Mojolicious 2.20以上のMojolicious::LiteのWebSocketとAnyEvent::Twitter::Streamを共存させるにはuse Mojolicious::Lite;を先に書く
スポンサードリンク
先日から、Mojolicious 2.20にしたら、AnyEvent::Twitter::Streamが使われているとWebSocketが動かない問題に悩まされ、とりあえず本稼働が優先だったのでMojolicious 2.19で開発をしていた案件がとりあえず終わり、原因究明ということで、とりあえずMojoliciousをアップデートしたら、2.36まで進んでいた。進みすぎ!
そんで、いくらバージョンの進みが早すぎるからといっても、ドキュメントに書いてあるサンプルスクリプトが動かなくなるようなことはあるめえ、ということで、
http://search.cpan.org/~sri/Mojolicious-2.36/lib/Mojolicious/Guides/Cookbook.pod
を見て、WebSocketの場所に書いてあるプログラム
use Mojolicious::Lite;
 
# Template with browser-side code
get '/' => 'index';
 
# WebSocket echo service
websocket '/echo' => sub {
  my $self = shift;
  
  # Connected
  $self->app->log->debug('WebSocket connected.');
  
  # Incoming message
  $self->on(message => sub {
    my ($self, $message) = @_;
    $self->send_message("echo: $message");
  });
  
  # Disconnected
  $self->on(finish => sub {
    my $self = shift;
    $self->app->log->debug('WebSocket disconnected.');
  });
};
 
app->start;
__DATA__
 
@@ index.html.ep
<!DOCTYPE html>
<html>
  <head><title>Echo</title></head>
  <body>
    <script>
      var ws = new WebSocket('<%= url_for('echo')->to_abs %>');
      
      // Incoming messages
      ws.onmessage = function(event) {
        document.body.innerHTML += event.data + '<br/>';
      };
      
      // Outgoing messages
      window.setInterval(function() {
        ws.send('Hello Mojo!');
      }, 1000);
    </script>
  </body>
</html>
を実行してみると、これは動いた。
これの先頭に、
use AnyEvent::Twitter::Stream;
を入れるだけで、WebSocket接続が勝手にcloseされてしまう。
で、いろいろ試行錯誤をした結果、
use Mojolicious::Lite; use AnyEvent::Twitter::Stream;
の順番に書くと、Mojolicious 2.20以上でもWebSocket接続が切れないことがわかりました!
これで、やっと最新のMojolicious環境でもAnyEvent::Twitter::Streamと、Mojolicious::LiteのWebSocketが共存できるようになりました!
ただし……今のところ、daemonで動くことは確認できているのですが、hypnotoadで動かすとだめみたいです。どうしたらいいんだろうなあ。
スポンサードリンク
トラックバック(0)
トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/3792






![: Amazon.co.jp: プラスティック・メモリーズ 1【完全生産限定版】(イベントチケット優先販売申込券付) [Blu-ray]](/lists/_9/B00VWX66E8.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 2【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX66K2.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 3【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX6MV0.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 4【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX66IO.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 5【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX6Y0E.jpg)
![: Amazon.co.jp: プラスティック・メモリーズ 6【完全生産限定版】[Blu-ray]](/lists/_9/B00VWX69D6.jpg)


 
                  
コメントする