Yup, somebody is definitely buffering the messages (mojo)
Connection open.
12/19/2014, 5:08:52 PM : Entering log4.
12/19/2014, 5:08:52 PM : Leaving log4.
12/19/2014, 5:09:06 PM : Entering myapp.
12/19/2014, 5:09:06 PM : 0...Fri Dec 19 17:08:54 2014
12/19/2014, 5:09:06 PM : 1...Fri Dec 19 17:08:57 2014
12/19/2014, 5:09:06 PM : 2...Fri Dec 19 17:09:00 2014
12/19/2014, 5:09:06 PM : 3...Fri Dec 19 17:09:03 2014
12/19/2014, 5:09:06 PM : Leaving myapp.
Forking the job in the background and doing some IPC ought to work , but may not be satisfying :)
My version of your code with Re: indenter / prettyprinter / beautifier / perltidy for mojolicio.us Mojo::Template and perltidy -olq -csc -csci=3 -cscl="sub : BEGIN END if while " -otr -opr -ce -nibc -i=4 -pt=0 "-nsak=*"
#!/usr/bin/perl --
# Automatically enables "strict", "warnings", "utf8" and Perl 5.10 fea
+tures
use Mojolicious::Lite;
Main( @ARGV );
exit( 0 );
sub myapp {
my $tx = shift;
$tx->send( "Entering myapp." );
foreach my $xx ( 0 .. 3 ) {
$tx->send( "$xx...".localtime() );
sleep( 3 );
}
$tx->send( "Leaving myapp." );
return "You should never see this.";
} ## end sub myapp
sub Main {
get '/' => sub { my $c = shift; $c->render( 'index' ); };
get '/log2' => sub { my $c = shift; $c->render( 'log2' ); };
websocket '/log3' => \&ws_log4;
app->secrets( [ 'password' => '8675309J' ] );
app->start;
} ## end sub Main
sub ws_log4 {
my $self = shift;
my $tx = $self->tx;
my $ip = $tx->remote_address;
app->log->debug( "Client '$ip' connected" );
$tx->send( "Entering log4." );
$self->inactivity_timeout( 50 );
Mojo::IOLoop->timer( 2 => sub { myapp( $tx ) } ); ## get started
$self->on(
finish => sub {
my( $c, $code, $reason ) = @_;
$c->app->log->debug( "WebSocket closed with status $code."
+ );
}
);
$tx->send( "Leaving log4." );
} ## end sub ws_log4
__DATA__
@@ index.html.ep
<html>
<head> <title>Static Page</title>
</head>
<body>
<h1>Index Page</h1>
<p>This is a static page.
For WebSockets example, click <a href="/log2">here</a>
+.
</p>
</body>
</html>
@@ log2.html.ep
<html>
<head> <title>WebSockets Example</title>
%= javascript '/mojo/jquery/jquery.js'
</head>
<body>
<p> wait for it )
<form><textarea id="result" cols="50" rows="20"></textarea
+></form>
%= javascript begin
var ws = new WebSocket('<%= url_for('log3')->to_abs %>
+');
ws.onopen = function() {
$('#result').text("Connection open.");
ws.send("Hi.");
};
ws.onmessage = function (e) {
// $('#result').append( "\n" + ( (new Date()).toIS
+OString() ) + " : " + e.data);
$('#result').append( "\n" + ( (new Date()).toLocal
+eString() ) + " : " + e.data);
};
% end
</body>
</html>