Just a tiny, simple and realtime pub/sub messaging service
I wanted to create a tiny solution that can replace
pusher
and similar services and learning more about the realtime world, so I dispatched this project.
- No dependencies, just a single binary !
- Light and Tiny.
- Event-Driven Design
webhooks
. - A client can listen on any resource.
- You control whether a client is allowed to
connect
,subscribe
,unsubscribe
using any programming language !. - A client defines itself using
key
via the url query param i.e?key=123
. - Send messages to only certain users.
- Docker ? >
docker run --network host alash3al/wsify -listen :8080 -webhook "http://localhost/wsify.php"
- Binary ? > goto the releases page and download yours.
- From Source ? >
go get -u github.com/alash3al/wsify
by simply connecting to the following endpoint
ws://your.wsify.service:port/subscribe
after connecting to the main websocket service
/subscribe
, you can send a simple json payloadcommands
to ask wsify tosubscribe
/unsubscribe
you to/from any channel/topic you want!
{
"action": "subscribe",
"value": "testchan"
}
Yes, each client can define itself using a query param
?key=client1
, this key will be passed to thewebhook
endpoint as well as the event being executed, and here is the event format:
{
// one of the following: connect|subscribe|unsubscribe|disconnect
"action": "subscribe",
// the channel if provided
"value": "testchan",
// the key provided by the client
"key": "client1"
}
Just a post request to
/publish
with the following format:
{
// the channel you want to publish to
"channel": "testchan",
// the data to be send (any format)
"payload": "testchan",
// array of clients "keys" (if you want certain clients only to receive the message)
"to": []
}
i.e
curl -X POST \
-H "Content-Type: application/json" \
-d '{"payload": "hi from the terminal", "channel": "testchan"}' \
http://localhost:4040/publish
Yes,
wsify --events=""
empty events means "NO WEBHOOK, WSIFY!"
Easy :), Just change the endpoint to something more secure and hard to guess it is an alternative to access tokens .. etc,
wsify --publish="/broadcasteiru6chefoh1Yee0MohJ2um5eepaephies3zonai0Cae7quaeb"
wsify --help
will help you !
You can use proxy, add this lines on your Nginx configration
location /websocket/subscribe {
proxy_pass http://localhost:4040/subscribe;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
Now you can call websocket by wss://yourdomain.com/websocket/subscribe
This project has been created by Mohamed Al Ashaal a Crazy Gopher ^^!
- Fork the Repo
- Create a feature branch
- Push your changes to the created branch
- Create a pull request.
Wsify is open-sourced software licensed under the MIT License.