54

Build Realtime Secured Apps using Wsify v2

 5 years ago
source link: https://www.tuicool.com/articles/hit/2Q7zqua
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Websocketify (wsify) v2.0

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

yYnQvia.gif

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

6jEBNr7.gif

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 .


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK