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
コメントする