| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Real-time UI updates are delivered over socket.io. Running more than one API instance requires both of the following — with only one, live updates break:
Redis backplane — set REDIS_URL so every instance shares a socket.io pub/sub adapter. Without it, an event emitted on one instance never reaches clients connected to another (events are silently lost and the UI only updates after a manual refresh).
REDIS_URL=redis://<host>:6379
When REDIS_URL is unset, the default in-memory adapter is used, so a single instance and local development work with no extra setup.
Reverse proxy with sticky sessions + WebSocket upgrade for /socket.io/. Without sticky sessions the polling handshake fails with 400 "Session ID unknown" because consecutive requests land on different instances. Example nginx:
map $http_upgrade $connection_upgrade { default upgrade; '' close; }
upstream vrt_api {
ip_hash; # sticky sessions
server api_1:3000;
server api_2:3000;
}
location /socket.io/ {
proxy_pass http://vrt_api;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_read_timeout 3600s;
}Confirmed with a 4-replica deployment: nginx ip_hash + WebSocket upgrade fixes the handshake, but cross-replica event delivery still requires REDIS_URL.
curl 'http://localhost:4200/users/login' \
-H 'accept: */*' \
-H 'accept-language: de-DE,de;q=0.9,en-US;q=0.8,en;q=0.7,fr;q=0.6' \
-H 'content-type: application/json' \
--data-raw '{"email":"developer.one@ldapmock.local","password":"password"}'| Back | FazBrowse Home | New Git URL |