Forem Creators and Builders 🌱

Discussion on: Explore Poxa as an open Pusher implementation?

Collapse
 
rhymes profile image
rhymes • Edited

Beside scaling as highlighted by @molly_struve I have a few other concerns:

  1. what would be a potential plan in integrating, modifying, tuning and if needed, forking, a real time server written in Elixir?
  2. I don't think it supports the push notifications API that Pusher has (not that's a big deal but if we want something to be 1:1 with Pusher we're already encountering a road block)
  3. I see no buzz around it, the community on GitHub seems quite small for such a critical piece of software. I searched the web but can't find much. This scares me a bit
  4. what happens if tomorrow Pusher releases a critical API update or breaks compatibility and Poxa is not up to date?

A possible alternative path: move off Pusher using another real time server gradually. We make a list of our needs (possibly also including transition to end to end encryption for messages which Pusher has but unfortunately the Ruby client doesn't support yet) and we find a open source "battle tested" real time server.

I understand rewriting here is not the best or easiest of solutions but currently we call the Ruby Pusher API less in just a few places around the code. What if, with feature flags, we start integrating a new server by wrapping those calls in a proxy object that sends them both to pusher and this new other server? We also call the frontend Pusher API in just a few files as well and we can build a wrapper to do the same: push messages to Pusher and to this new server.

We can then test it by activating the feature flag for direct messaging between two users, then for a group and so on.

A few possible alternatives with a decently sized community (I haven't tested any nor dug in deep into pros and cons of each but they have documentation and benchmarks):

  • AnyCable is ActionCable compatible on the client side and instead of using Rails for the real time part uses a Go server. So we'd be more or less compatible with verbatim Rails
  • Centrifugo which has quite a lot of features, written in Go

Sadly none of those seems to support e2e encryption :-D