Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/alash3al/wsify
A very simple general purpose websocket server that does the job
https://github.com/alash3al/wsify
backend go golang pub pubsub pusher realtime realtime-messaging redis-channel tiny topic webhook websocket-service websockets
Last synced: 2 days ago
JSON representation
A very simple general purpose websocket server that does the job
- Host: GitHub
- URL: https://github.com/alash3al/wsify
- Owner: alash3al
- Created: 2018-01-24T10:59:20.000Z (almost 7 years ago)
- Default Branch: master
- Last Pushed: 2024-06-27T13:42:49.000Z (4 months ago)
- Last Synced: 2024-08-02T02:13:15.744Z (3 months ago)
- Topics: backend, go, golang, pub, pubsub, pusher, realtime, realtime-messaging, redis-channel, tiny, topic, webhook, websocket-service, websockets
- Language: Go
- Homepage:
- Size: 954 KB
- Stars: 522
- Watchers: 19
- Forks: 54
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-golang-repositories - wsify - time self-hosted pub/sub messaging service (Repositories)
- starred-awesome - wsify - Just a tiny, simple and real-time self-hosted pub/sub messaging service (Go)
- awesome - wsify - Just a tiny, simple and real-time self-hosted pub/sub messaging service (Go)
README
WSIFY
======
> a tiny general purpose websocket server that could be used for building real-time apps
> in addition to giving you the power to simply accept/reject any websocket message when using the
> authorizer feature (a webhook that should respond with 200 OK on success and anything else to reject).Philosophy
==========
- A websocket server should only responsible for transmitting messages in real-time between connected parties.
- It isn't the websocket server responsibility to authorize whether a party is allowed to send certain message or not.
- An authorizer must respond with `200 OK` if a party can send a message.
- `200 OK` means "Authorized"
- `5xx` means "the authorizer is down, please close the current connection and reconnect"
- anything else means "NotAuthorized"
- The client identity should be declared in the query params while connecting to the websocket endpoint and as an argument in the `args` of the message if needed.
-Definitions
============
### Message
> is a data structure contains some data to be transmitted.```json5
{
// command is a string describes what should be done
// available commands are:
// "join": joins a channel (specified in the "args.channel")
// "leave": leaves a channel (specified in the "args.channel")
// "broadcast": broadcasts a content (specified in the "args.content") to a channel (in "args.channel")
"command": "join",
"args": {
"channel": "some_channel"
}
}
```### Authorizer
> a webhook that responds with `200 OK` to accept a message sent by a websocket client,
> the authorizer will receive a `POST` request containing a message data structure as described above, but there
> is one special command that isn't described which is "connect", it is fired before accepting the websocket connection
> and it sounds like
```json5
{
"command": "connect",
"args": {
// array of all http headers sent by the client while trying to open a websocket connection.
"headers": [/*...*/],
// an object that contains all available query params sent by the client while trying to open a websocket connection.
"query": {/*...*/}
}
}
```Usage
=====
> There is no need to say a lot on how to use this software, just connect using any websocket client to `http://wsify:3000/ws` and start sending messagesExamples
========#### \> How can a client/device connect to the websocket service?
> by simply connecting to the following endpoint `ws://your.wsify.service:port/ws`#### \> What is the command used to join a channel named "hello"?
>
```json
{
"command": "join",
"args": {
"channel": "hello"
}
}
```#### \> What is the command used to broadcast a message to the channel "hello"?
```json
{
"command": "broadcast",
"args": {
"channel": "hello"
}
}
```#### \> How can I publish message to `hello` from another server without connecting to the websocket endpoint?
> Do a post request to `/broadcast` with the following format:
```json5
{
"channel": "hello",
"args": {
"content": "Hello World! from the server"
}
}
```### for more info look at `$ ./wsify --help`