Awesome Open Source
Awesome Open Source

Websocketify (wsify) v2.0 StackShare

Just a tiny, simple and realtime pub/sub messaging service

Quick Demo

Why

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.

Features

  • 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.

Installation

  • 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

Questions

(1)- How can a client/device connect to the websocket service?

by simply connecting to the following endpoint ws://your.wsify.service:port/subscribe

(2)- How can a client subscribe to a certain channel(s)/topic(s)?

after connecting to the main websocket service /subscribe, you can send a simple json payload commands to ask wsify to subscribe/unsubscribe you to/from any channel/topic you want!

(3)- What is the commands format?

{
	"action": "subscribe",
	"value": "testchan"
}

(4)- Can I control the client command so I can allow/disallow certain users?

Yes, each client can define itself using a query param ?key=client1, this key will be passed to the webhook 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"
}

(5)- How can I publish message to i.e testchan?

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

(6)- Can I skip the webhook events for testing?

Yes, wsify --events="" empty events means "NO WEBHOOK, WSIFY!"

(7)- How can I secure the publish endpoint, so no one except me can publish ?!!

Easy :), Just change the endpoint to something more secure and hard to guess it is an alternative to access tokens .. etc, wsify --publish="/broadcasteiru6chefoh1Yee0MohJ2um5eepaephies3zonai0Cae7quaeb"

(8)- What about other options?

wsify --help will help you !

(9)- What is the websocket client used in demos?

Simple Websocket Client

(10)- How I can use it over SSl/TLS with Nginx?

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

Quick Demo2

Author

This project has been created by Mohamed Al Ashaal a Crazy Gopher ^^!

Contribution

  • Fork the Repo
  • Create a feature branch
  • Push your changes to the created branch
  • Create a pull request.

License

Wsify is open-sourced software licensed under the MIT License.


Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
go (14,453
golang (3,683
websockets (305
realtime (209
backend (208
pubsub (93
webhook (63
tiny (60
pusher (30
realtime-messaging (25
topic (19
pub (17

Find Open Source By Browsing 7,000 Topics Across 59 Categories