私はこのコード スニペットを持っています。次のように X 秒ごとに文字列をサーバーにプッシュしようとしています。
#!/usr/bin/env perl
use Mojolicious::Lite;
use EV;
use AnyEvent;
use POSIX qw(strftime);
get '/' => sub {
my $self = shift;
$self->render('main');
};
websocket '/echo' => sub {
my $self = shift;
my $w;
$w = AE::timer 3, 1, sub {
$self->send('Got it');
};
# $self->send(strftime("Server $$: %a %b %e %H:%M:%S %Y", localtime));
};
app->start();
__DATA__
@@ main.html.ep
<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script>
</head>
<body>
<table id="tableID">
<tbody>
</tbody>
</table>
<script type="text/javascript">
var ws = new WebSocket('ws://192.168.1.104:3000/echo');
ws.onopen = function () {
alert('Connection opened');
};
ws.onerror = function() { alert("Error"); };
ws.onmessage = function (msg) {
$("#tableID").find('tbody')
.append($('<tr>')
.append($('<td>')
.text(msg.data)
)
);
};
</script>
</body>
</html>
AFAIK MojoはIO::Loop
イベントループを使用しましたが、これで問題ないと思いますAnyEvent
これはうまくいかず、なぜだろうと思っています。AE 部分を削除して simple のコメントを外すとsend
、ブラウザーに結果が表示されます。
PS: 一部のプロジェクトで WebSockets と Mojo を試しているところですが、Mojo と AnyEvent + WebSockets の両方を使用する必要があります。