Mojolicious 2のWebSocketではon_finish(sub{});がないので、on(frame=>sub{});で対応してみた
スポンサードリンク
今動かしているMojolicious::LiteでWebSocketでクライアントに表示するやつなんですけれども、Mojoliciousのバージョン1/2の両用で動くようにしていたのですが、本番のMojolicious 2の環境では、WebSocketクローズのイベントが取得できない状態になっていました。よって、こんな感じにしてみました。
# WebSocketコネクション切断時処理(共通) my $on_finish = sub { # ログに切断記録 app->log->debug('Client disconnected'); # $clientsからWebSocketクライアントを削除 delete $clients->{$id}; }; # WebSocketイベント設定 if ( $Mojolicious::VERSION < qv("v2.0") ) { # Mojolicious 1.xの時の処理 $self->on_message(); $self->on_finish( $on_finish ); } else { # Mojolicious 2.xの時の処理 $self->on( message => sub {}, ); $self->on( frame => sub { my ($ws, $frame) = @_; if ( $frame->[1] == 8 ) { # opcode=8: close $on_finish->(); } }, ); }
これを見ると、どうも frame-opcode = 9(ping)、frame-opcode=10(pong)も$ws->on(frame=>sub{}); の中で対応しなくちゃいけないのかなーとか思っていますが、調べ中……
ここを参考にした:
WebSocket(hybi-07)でechoサーバを作ってみた - いろいろな何か [d.hatena.ne.jp]
スポンサードリンク
トラックバック(0)
トラックバックURL: http://blog.dtpwiki.jp/MTOS/mt-tb.cgi/3782
コメントする