Hi Jan, I´ve using Mojo::Redis and find it very convenient as the glue 
that allows to comunicate non-blocking among different processes (toads) 
when running hypnotoad (using subscribe and publish, just as the "Websocket 
example" in the module's synopsis).

 Something I would suggest for you to take a look is related to the 
scalling of simultaneos redis clients needed for a realtime app. I 
understand that you would need a dedicated "subscribe" client plus a 
"publish" per connected websocket, if you follow the mencioned example.

 That could be a problem depending on the nature of your app. In my case I 
was working on an app that will have thousand of appliances with very low 
traffic but allways on, so I ended up using Mojo ::Redis with something 
like a psubscribe "app:*" client per toad, and just one publishing client 
(probably blocking) also per toad (Anyway  I'm not sure how this solution 
will scale in the field, we will see in the followings months probably).

  Hope you can add to Mojo::Redis2 some kind of support for a solution that 
allows to share psubscribe redis connections among many users on a single 
process or toad.

BR,
Daniel

El jueves, 26 de junio de 2014 09:24:00 UTC-3, Jan Henning Thorsen escribió:
>
> Hi,
>
> I'm trying to make a new Redis driver for Mojolicious that makes sense. Me 
> and Marcus Ramberg has been maintaining Mojo::Redis, but I see some issues 
> with the API:
>
> * No blocking support
> * Really poor error handling
> * Trying to be clever with BLPOP and SUBSCRIBE, using an overloaded on() 
> method
> * Some really weird bugs that that I can't seem to figure out (Got one 
> project at work which fail on random)
> * Public methods that is confusing: connect(), connected(), disconnect() 
> (?), protocol_redis() and timeout()
>
> So now I want to make a new version that Makes Sense (tm). The project is 
> currently just a branch under the old mojo-redis repo: 
> https://github.com/marcusramberg/mojo-redis/tree/v2
>
>
> # What I need help with
>
> 1. Look if the API makes sense.
> 2. Look at the code to see if it makes sense.
> 3. Tell me when something is awkward or plain wrong.
> 4. Figure out if ->execute() makes sense and/or if it could be replace 
> with something "nicer"
> I often do many commands at once, so what execute() fix is this:
>
>   Mojo::IOLoop->delay(
>     sub {
>       my ($delay) = @_;
>       $redis->get(foo => $delay->begin);
>       $redis->get(bar => $delay->begin);
>       $redis->get(baz => $delay->begin);
>     },
>     sub {
>       my ($delay, $foo_err, $foo, $bar_err, $bar, $baz_err, $baz) = @_;
>       # ^ ONE MILLION ARGUMENTS!!
>     },
>   );
>
> 5. Does it make sense for one $redis object to have multiple connections 
> to the database?
> This is one of the things I built in to the new module: blpop(), 
> subscribe(), ... will make a new connection to the database instead of user 
> of the module need to remember which method is blocking or take over the 
> connection. But does it really make sense?
>
> 6. I need a method for UNSUBSCRIBE
> The module inherit from Mojo::EventEmitter, so I can't really use the 
> unsubscribe() method to UNSUBSCRIBE from channels. Got an idea for an 
> alternative way, or some fancy hack to make it work with unsubscribe()? 
> I've been considering $redis->unsubscribe(message => $channel_name); but it 
> kind of breaks the signature.
>
> 7. Do Mojo::Redis2 really need "encoding" attribute?
> Why isn't this always UTF-8? I don't get the encoding attribute, but I 
> kept it because of legacy from the other redis modules.
>
> 8. What do you think about pipelined()?
> Please have a look at 
> https://github.com/marcusramberg/mojo-redis/blob/v2/t/pipelined.t
>
> 9. ???
>
>
> # What is done (might be redesigned though)
>
> * I got basic redis methods working blocking and non-blocking
> * I got (p)subscribe methods working and (p)message events
> * I got pipelining working.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Mojolicious" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/mojolicious.
For more options, visit https://groups.google.com/d/optout.

Reply via email to