in reply to Re: Net::Async::WebSocket::Server in a separate main loop
in thread Net::Async::WebSocket::Server in a separate main loop

Ok, finally even the main loop concept with "loop_once" does not work, as the main loop is blocked too much. My only current solution is to create the websocket server via threads, which works quite well. I was concerned about memory, as threads are copying a lot of stuff, but as I will create only 1 I think I can live with it.

Thanks anyways

  • Comment on Re^2: Net::Async::WebSocket::Server in a separate main loop

Replies are listed 'Best First'.
Re^3: Net::Async::WebSocket::Server in a separate main loop
by alexander_lunev (Pilgrim) on Jan 13, 2023 at 06:19 UTC

    Will you, please, if you'll come to solution with threads, post it here too?

    P.S.: I was trying to figure out about the same scheme - I'm already have CGI processed by Mojolicious server, which take HTTP requests, send them through RabbitMQ to backend, listening for answer. But with websocket connections server needs to listen for messages coming through RabbitMQ from backend to send them to websocket, and it's without request from user. So I need Mojolicious to read RabbitMQ queue in a Mojo::IOLoop event loop system while serving CGI and websocket requests, and for now there are two good queue readers - AnyEvent::RabbitMQ (nonblocking, based on other than Mojolicious AnyEvent loop system) and Net::AMQP::RabbitMQ (blocking), so none of them fit to Mojolicious system. Solution not found so far.

      If you tell AnyEvent and Mojo to use the same event library (like EV) then they are compatible. Make sure you have libev installed and that Mojo::Reactor::EV works. Maybe set MOJO_REACTOR to convince it to work: BEGIN { $ENV{MOJO_REACTOR} = 'Mojo::Reactor::EV'; }

      Also, I see Mojo::RabbitMQ::Client. No experience with it, but you might try that first.

        Thank you for this short and clear answer! I'll give it a try.

        As for Mojo::RabbitMQ::Client, after I read kraih (one of Mojolicious creator) comments in github issues for this project, I'm kind of stopped looking at it.