{"repo":"syhlion/gusher.cluster","free":true,"listed":false,"github":"https://github.com/syhlion/gusher.cluster","clone":"git clone https://github.com/syhlion/gusher.cluster.git","description":"Self-hosted Pusher-style realtime WebSocket push service — NATS-backed (no Redis), RS256 JWT auth ｜ 自架仿 Pusher 即時 WebSocket 推播服務，以 NATS 為後端（免 Redis）、RS256 JWT 認證","language":"Go","stars":10,"topics":["websocket-server","support-cluster","docker","websocket","golang-application","go","jwt","nats","push","pusher"],"license":"MIT","category":"networking-infra","readme_excerpt":"Gusher.Cluster Self-hosted realtime push service (Pusher-style). Browsers hold a WebSocket and subscribe to channels; backends POST to push a message into a channel. Horizontally scalable, backed by NATS — no Redis . Architecture - slave — holds the WebSocket connections, verifies the JWT locally (RSA public key), and fans out messages to subscribers. - master — a stateless REST API to push messages and query presence. - NATS — carries messages between nodes (bus) and answers presence queries (request/reply). No Redis, no token store, no decode service. Both roles are stateless and scale horizontally. Full write-up (bus, presence, evolution from Redis) in docs/ARCHITECTURE.md. Requirements - NATS (the only backend) — nats-server 2.10+. - An RSA key pair — master/slave verify the JWT with the public key ; your own auth service signs JWTs with the private key. See docs/KEYS.md for the full generate → sign → verify → rotate walkthrough. Quick start (Docker Compose) The stack ships a demo RSA key ( docker-compose/public.pem , matched by test/key/private.pem ), so it runs out of the box — no setup: Brings up nats + gusher-master ( :7777 ) + gusher-slave ( :8888 ), no Redis. See it work — one command brings the stack up, signs a JWT, subscribes over WebSocket, pushes a message and asserts it arrives, then tears down: Or test by hand against the running stack — sign a token with the demo key, then auth → connect → push: Use your own keys (for real deployments) — generate an RSA pair","default_branch":null,"files":null,"tree":[],"storefront":"/r/syhlion","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/syhlion/gusher.cluster/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}