#!/usr/bin/perl use Mojolicious::Lite; use ZMQ; use ZMQ::Constants qw|ZMQ_PUB ZMQ_SUB ZMQ_SUBSCRIBE ZMQ_FD ZMQ_DONTWAIT ZMQ_NOBLOCK|; use strict; # Template with browser-side code get '/' => 'index'; # WebSocket echo service websocket '/msgs' => sub { my $c = shift; # Opened $c->app->log->debug('WebSocket opened'); # Increase inactivity timeout for connection a bit $c->inactivity_timeout(300); my $ctx = ZMQ::Context->new(10); my $subsocket = $ctx->socket(ZMQ_SUB); $subsocket->setsockopt(ZMQ_SUBSCRIBE,'event'); $subsocket->connect ('tcp://127.0.0.1:5555'); my $subsocket_fd = IO::Handle->new_from_fd($subsocket->getsockopt(ZMQ_FD),'r'); Mojo::IOLoop->singleton->reactor->io($subsocket_fd=> sub { my ( $r, $w ) = @_; if (my $message = $subsocket->recvmsg(ZMQ_DONTWAIT)) { $c->send($message->data); } undef $w; } ); Mojo::IOLoop->start unless Mojo::IOLoop->is_running; }; app->start; __DATA__ @@ index.html.ep Echo msgs