Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

Re^3: Mojolicious Websocket example

by Anonymous Monk
on Jun 20, 2015 at 18:22 UTC ( [id://1131279]=note: print w/replies, xml ) Need Help??


in reply to Re^2: Mojolicious Websocket example
in thread Mojolicious Websocket example

Now I have the script working with correction that trippledubs did. Thank you very much. Still can not understand why scripts that were in the same directory were not recognized.

Why do you expect them to be recognized?

$ mojo generate app Goner [mkdir] ...goner\script [write] ...goner\script\goner [chmod] ...goner\script\goner 744 [mkdir] ...goner\lib [write] ...goner\lib\Goner.pm [mkdir] ...goner\lib\Goner\Controller [write] ...goner\lib\Goner\Controller\Example.pm [mkdir] ...goner\t [write] ...goner\t\basic.t [mkdir] ...goner\log [mkdir] ...goner\public [write] ...goner\public\index.html [mkdir] ...goner\templates\layouts [write] ...goner\templates\layouts\default.html.ep [mkdir] ...goner\templates\example [write] ...goner\templates\example\welcome.html.ep

In this example same directory might be ...goner\ or ...goner\lib\ or ...goner\script\ but neither of those are ...goner\public\

Replies are listed 'Best First'.
Re^4: Mojolicious Websocket example
by Anonymous Monk on Jun 20, 2015 at 18:27 UTC
    For comparison a lite app also won't serve from same directory, only from public
    $ mojo generate lite_app [exist] ...\goner [write] ...\goner\myapp.pl [chmod] ...\goner\myapp.pl 744 $ md public $ echo in public > public\hi.txt $ echo in same > no.txt $ perl myapp.pl get /hi.txt [Sat Jun 20 11:30:28 2015] [debug] Your secret passphrase needs to be +changed in public $ perl myapp.pl get /no.txt |wc --lines [Sat Jun 20 11:30:36 2015] [debug] Your secret passphrase needs to be +changed [Sat Jun 20 11:30:36 2015] [debug] GET "/no.txt" [Sat Jun 20 11:30:36 2015] [debug] Template "not_found.development.htm +l.ep" not found [Sat Jun 20 11:30:36 2015] [debug] Template "not_found.html.ep" not fo +und [Sat Jun 20 11:30:36 2015] [debug] Rendering inline template "fd403ab5 +5a4c875e35b42428816134c7" [Sat Jun 20 11:30:36 2015] [debug] Rendering inline template "dd85456c +f9f44e1e43bebae130a7f9df" [Sat Jun 20 11:30:36 2015] [debug] 404 Not Found (0.050898s, 19.647/s) 540
Re^4: Mojolicious Websocket example
by rkrasowski (Sexton) on Jun 21, 2015 at 01:39 UTC

    Well, that would explain, now I put scripts into public directory and everything is working like a charm. Thank you

    Now I am trying to build an application that will let's say every second check the DB or file and if there is some new value, will send it via websocket to thebrowsers. So, I wrote a script that send a message ( date and time). I am able to send it once, but how to put it into the loop? How to check the DB every seconds or every few seconds and send that data via WS?

    here is the code that sends single message:

    #!/usr/bin/env perl use warnings; use strict; use Mojolicious::Lite; get '/' => 'index'; websocket '/echo' => sub { my $c = shift; $c->app->log->debug('WebSocket opened'); $c->inactivity_timeout(300); my $msg1 = `date`; $c->send($msg1); $c->on(finish => sub { my ($c, $code, $reason) = @_; $c->app->log->debug("WebSocket closed with status $code"); }); }; app->start; __DATA__ @@ index.html.ep <!DOCTYPE html> <html> <head><title>Test</title></head> <body> <script> var ws = new WebSocket('<%= url_for('echo')->to_abs %>'); ws.onmessage = function(event) { document.getElementById("dateTime").innerHTML = event.data; }; </script> <h1 id="dateTime"></h1> </body> </html>

    Thanks like always.

    Robert

      I am able to send it once, but how to put it into the loop? How to check the DB every seconds or every few seconds and send that data via WS?

      copy/paste the example I linked ?:)

      oh right, its full of stuff

      copy/paste the example you already had in the beginning?

      Yeah, that sounds good, copy/paste the example you already had in Mojolicious Websocket example, the one trippledubs said worked

      Also see localtime/gmtime

        OK, I am learning that stuff. Here is a solution for my problem. Script runs every second and sends data ( current time in this example) via websocket.

        Here is the code:

        #!/usr/bin/env perl use warnings; use strict; use Mojolicious::Lite; get '/' => 'index'; websocket '/echo' => sub { my $c = shift; $c->app->log->debug('WebSocket opened'); $c->inactivity_timeout(300); my $id = Mojo::IOLoop->recurring(1 => sub { my $msg1 = `date`; $c->send($msg1); }); $c->on(finish => sub { my ($c, $code, $reason) = @_; $c->on(finish => sub { Mojo::IOLoop->remove($id) }); $c->app->log->debug("WebSocket closed with status $code"); }); }; app->start; __DATA__ @@ index.html.ep <!DOCTYPE html> <html> <head><title>Test</title></head> <body> <script> var ws = new WebSocket('<%= url_for('echo')->to_abs %>'); ws.onmessage = function(event) { document.getElementById("dateTime").innerHTML = event.data; }; </script> <h1 id="dateTime"></h1> </body> </html>

        Thanks for help.

        Robert

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1131279]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others goofing around in the Monastery: (6)
As of 2024-04-18 04:56 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found