49 lines
1.7 KiB
Markdown
49 lines
1.7 KiB
Markdown
# ESS Demux
|
|
|
|
This service guarantees one thing to you; it will have a websocket connected with ESS events.
|
|
|
|
The specific flow is as follows:
|
|
|
|
1. If https://push.nanite-systems.net/ is up, the client websocket is wired to that.
|
|
2. Else, connect to https://push.planetside2.com/ based on `?environment={}`, and the client websocket is wired to either 1 or 3 of those.
|
|
|
|
- If environment = `all`, it will connect 3 times to `pc`, `ps4us`, and `ps4eu`.
|
|
- Else, connect to specified environment.
|
|
- Also, try reconnecting to the main socket every minute.
|
|
|
|
3. If that fails, the client websocket will never respond.
|
|
|
|
## Why would you want this?
|
|
|
|
NSS helps be resilient to ESS failures, but NSS isn't failure-proof itself. This acts as a proxy that'll gracefully select one source or another.
|
|
|
|
### Alternatives
|
|
|
|
If you can accept the loss of PS4 data, you may use nginx or HAProxy to achieve the same effect...
|
|
|
|
[**nginx example.conf**](./docs/alternatives/ess.nginx.conf)
|
|
|
|
The above may not work entirely correctly... ymmv.
|
|
|
|
Saerro **does** want PS4 data, so we use the ess-demux service.
|
|
|
|
## How to use this
|
|
|
|
The service runs on port 8007 by default, you can change it to whatever via `PORT`, if you're using this as a bare service. You may also change the `DEFAULT_SERVICE_ID` from `s:example`; allowing you to omit this from the URL.
|
|
|
|
`docker run -d -p 8007:8007 ghcr.io/genudine/saerro/ess-demux:latest`
|
|
|
|
Connect to `ws://localhost:8007/streaming?environment=all&service-id=s:example`
|
|
|
|
Send subscriptions like any other ESS-compatible websocket.
|
|
|
|
Upon connection, you can expect an event like this:
|
|
|
|
```json
|
|
{
|
|
"connected": true,
|
|
"service": "ess-demux",
|
|
"type": "essDemuxConnectionStateChanged",
|
|
"upstream": "nss" // or "ess"
|
|
}
|
|
```
|