# ScaleSocket
[](https://github.com/scalesocket/scalesocket/actions)
[](https://crates.io/crates/scalesocket)
*ScaleSocket* is a collaborative websocket server and autoscaler. It's a simple way to build multiplayer backends.

## About
ScaleSocket is a command line tool that lets you to wrap a script or binary, and serve it collaboratively over websockets. Clients then connect to *rooms* (a.k.a. channels) which have a unique URL (`wss://example.com/exampleroom`). Connecting to a room spawns a new process of the wrapped binary. Subsequent connections to the same room share the process.
## Documentation
For full details and installation instructions, see the [documentation](https://www.scalesocket.org/man/).
## Features
* Share a backend process between websocket clients
* Proxy websocket traffic to normal TCP socket or stdio
* Route server messages to specific clients
* Serve static files
* Expose CGI [environment variables](https://www.rfc-editor.org/rfc/rfc3875.html) to backend process
* [OpenMetrics](https://github.com/OpenObservability/OpenMetrics) compatible
* Built-in lobby server for listing rooms
## Quick Start
Create the file `example.sh` with the follow content:
```console
#!/bin/bash
echo '{"message": "hello world"}'
sleep 1
echo '{"message": "goodbye"}'
sleep 1
```
Make it executable:
```console
$ chmod u+x example.sh
```
Wrap it by starting the ScaleSocket server:
```console
$ scalesocket ./example.sh
```
Then connect to the websocket endpoint, for example using curl:
```console
$ curl --include \
--no-buffer \
--http1.1 \
--header "Connection: Upgrade" \
--header "Upgrade: websocket" \
--header "Sec-WebSocket-Key: SGVsbG8sIHdvcmxkIQ==" \
--header "Sec-WebSocket-Version: 13" \
http://localhost:9000/exampleroom
�{"message": "hello world"}�{"message": "goodbye"}%
```
For more advanced usage and features, see [usage](https://www.scalesocket.org/man/usage.md).
## License
* Apache License, Version 2.0 ([LICENSE](https://github.com/scalesocket/scalesocket/blob/HEAD/LICENSE) or [www.apache.org](http://www.apache.org/licenses/LICENSE-2.0))
## Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be licensed as above, without any additional terms or conditions.