Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/chef-js/uws
Command Line Interface Static Files Server written in TypeScript for Single Page Applications serving in Node with Microwebsockets
https://github.com/chef-js/uws
chat cli http-server javascript nodejs nodejs-server realtime ssl typescript uwebsocketsjs websocket websocket-client websocket-server websockets
Last synced: 2 months ago
JSON representation
Command Line Interface Static Files Server written in TypeScript for Single Page Applications serving in Node with Microwebsockets
- Host: GitHub
- URL: https://github.com/chef-js/uws
- Owner: chef-js
- Created: 2022-02-10T17:17:39.000Z (almost 3 years ago)
- Default Branch: main
- Last Pushed: 2023-06-11T20:26:17.000Z (over 1 year ago)
- Last Synced: 2024-05-07T10:22:01.242Z (9 months ago)
- Topics: chat, cli, http-server, javascript, nodejs, nodejs-server, realtime, ssl, typescript, uwebsocketsjs, websocket, websocket-client, websocket-server, websockets
- Language: JavaScript
- Homepage: https://chef-js-uws.herokuapp.com/
- Size: 412 KB
- Stars: 2
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# chef-uws
**web-sockets** micro-service manager and **static files server** at the same port,
designed for **node** written in **typescript**, with **tests**
- `uWebSockets.js` for serving files and websockets
## Command-Line Running
```bash
$ npx chef-uws folder [--debug] [--ssl] [--port 443] [--plugin path/to/plugin.js]
```## Installation
```bash
$ yarn add chef-uws
```## Minimal Chat Demo
https://chef-js-uws.herokuapp.com/
```bash
$ yarn add chef-uws
$ yarn chef-uws node_modules/chef-uws/demo --plugin node_modules/chef-core/chat.js
```Minimal configuration is specifying folder, then it serves it from http://localhost:4200
```ts
const startServer = require("chef-uws");
const config = { folder: "docs" };startServer(config).then((server: uWS.App | uWS.SSLApp) => {
// server api is get, post, any
server.any("/*", (res: uWS.HttpResponse, req: uWS.HttpRequest) => {
res.end("200 OK");
});
});
```## Configuration
For more information about config parameters read:
- The default configuration https://github.com/chef-js/core#configuration
- The parameters types https://chef-js.github.io/core/types/Config.html
## Plugins
The **plugins** are a mighty thing, think of them like **chat rooms**,
after a client **handshakes** the chat room, his messages start being **forwarded** to that room,
and it is being handled there by the **room's own plugin**.
This means you can have for example: a **chat** server and other unrelated **websocket services**
at the **same port** as the **files server** too. **One** client may be in **many** rooms.
### STEP 1: Before Connection
- client -> `websocket` connects to `location.origin.replace(/^http/, 'ws')`
- server -> waits for any incoming `config.join` events### STEP 2: Connection
- client -> sends `join` event with room name (topic/plugin name)
- server -> if such plugin is configured joins client to that plugin### STEP 3: After Connection
- client -> does some actions (emits, receives)
- server -> plugin responds to websocket actions### STEP 4: Finish Connection
- client -> disconnects after some time
- server -> broadcasts to all plugins from room that client left (`config.leave`)## API
- a plugin is a function `(ws, { id, event, data })` that is called **each time** the frontend websocket emits to server
- context (`this`) of each plugin is the `server` instance.
- plugins receive (and send) the data in the format of:```ts
{
id, // WebSocket id - this is automatically added
event, // event name as string
data, // any data accompanying the event
}
```## Client
front-end **websocket client** for `uWebSockets.js` with same API as `socket.io-client`:
```html
```
you can use it like this:
```ts
const UWebSocket = require("chef-uws/client");
// will connect to ws:// or wss:// protocol depending on ssl enabled or not
const ws = new UWebSocket(location.origin.replace(/^http/, "ws"));ws.on("connect", () => {
// after connect, join a plugin (chat) - emit "/join" event with data = "chat"
ws.emit("/join", "chat");
});
ws.on("disconnect", () => {
// your socket got disconnected
});
ws.on("/join", (id, event, data) => {
// socket with id joined plugin, first join sets your socket's id
ws.id = ws.id || id;
});
ws.on("/leave", (id, event, data) => {
// socket with id left plugin
});
ws.on("example", (id, event, data) => {
// handle event with "example" name
});
ws.onAny((id, event, data) => {
// handle all incoming messsages
});
```## License
MIT