go-nats-app
A spin-off of go-nats-app. See the readme there for full details.
Credit to Hans for the original and sending me on this journey.
Most of the original code is in setupNatsApi for the server
and front.go for the client. Nats server setup is
in service.go.
Changes in this spin-off
In the original code, the nats client in the wasm connects to the nats server
using a Nats Websocket via
a CustomDialer.
Go-App -> Nats Client -> <Nats WebSocket> -> WebSocket Endpoint
In the spin-off, the nats client in the wasm connects using
a CustomDialer again,
but the connection is to a WebSocket Handler.
This handler adapts the websocket binary payloads to the standard Nats tcp
connection Client Protocol.
Go-App -> Nats Client -> <Nats WebSocket> -> <WebSocket Handler> -> Nats Endpoint
This allows the nats websocket endpoint to be on the same host:port where the go-app is served.
The client nats connection and underlying websocket are managed as a go-app component.
Incrementing the echo counter in the original was replaced with a client http get to /echo/username
.
Interestingly, this led to the discovery of the nats client connection option nats.InProcessServer
. Neat.
Disclaimers
- Not fully tested, not production ready, no warranty, no support, etc.
- The note here for writers of client libraries:
- "Any data from a frame must be going through a parser that can handle partial protocols".
- In this small demo, no issues were encountered. Maybe it is not applicable.
- WebSocket Handler definitely needs to cover a few more error / connect / reconnect / disconnect
cases.
- As pointed out, this seems like a bit like re-inventing the wheel.
- This is not intended to replace the built-in nats websocket client with all of its fail over / cluster
capabilities. Use that if that's needed.

created by tigwen