I came across this repo the other day...
Open Pusher implementation compatible with Pusher libraries. It's designed to be used as a single registered app with id, secret and key defined on start.
How do I speak 'poxa'?
['poʃa] - Phonetic notation
[posha] : po ( potion ), sha ( shall )
- Public channels;
- Private channels;
- Presence channels;
- Client events;
- SSL on websocket and REST API;
- Simple console;
- REST API
- /users on presence channels
Poxa is a standalone elixir server implementation of the Pusher protocol.
You need Elixir 1.9 at least and Erlang 21.0
Clone this repository
mix deps.get mix compile
The default configuration is:
- Port: 8080
- App id: 'app_id'
- App key: 'app_key'
- App secret: 'secret'
Docker images are automatically built by Docker Hub. They are available at Docker Hub: https://hub.docker.com/r/edgurgel/poxa-automated/tags/
One can generate it using:
docker build -t local/poxa ..
docker run command should look like…
It seems maintained, well-thought-out, and seemingly used in production.
Currently we have a hard dependency on the closed source Pusher, and it would be nice if we could break this as we have other stuff.
The easiest way to break our dependency would be to use a compatible open source version that more or less plugs right in, I'd think.
There are a few options for how we might make use of this...
- Only use it in development— such that we don't have to install a third party to make the real-time stuff work.
- Use it in dev an as an option in prod, but we can still use the real Pusher for our infrastructure and as a suggestion in prod.
- Go all in on using this in dev and prod and work with this project for all of our needs if we run into problems at production scale.
Our other options for moving off Pusher to go full FOSS would require more substantial rewrites, so going with a compatible library like this seems really cool!
A good part of my reluctance to add more real-time functionality is the fact that we're currently writing our code against a closed-source API, so if we'd eventually move in the more fully open source direction we wouldn't want to create more surface area for a future rewrite.
I played around with it myself and got it sort of working... I'd be curious to hear peoples' thoughts on this.