Repository navigation
Release v1.3.3
🚀 Release v1.3.3
✨ New Features
Push Mode (NAT / Outbound-only Support)
- Clients behind NAT or without inbound ports now proactively push metrics every 3 seconds
- Server automatically detects push-mode clients and skips inbound polling for them
- TCPing is executed locally on push-mode clients; results are included in each push payload
- Server responds to each push with the latest TCPing configuration for immediate propagation
Public IP Detection for NAT Clients
- Client now prioritizes external API lookups (ipinfo.io and others) in parallel to obtain the correct egress/public IP
- Server-side NAT IP fixup: if the reported IP is private or empty, the real remote IP from the HTTP request is used for geolocation
- Both mechanisms ensure accurate country detection for NAT and outbound-only machines
Real-time SSE Broadcast for Push Clients
- Server immediately broadcasts an SSE event after receiving a push, making the frontend update near-instantly (< 3 s) instead of waiting for the next polling cycle
🔧 Bug Fixes & Stability
Registration Conflict on IP Change Fixed
- Removed the IP/port comparison that caused HTTP 409 errors when a client legitimately re-registered with a different IP
- Client identity is now validated solely by ID + secret, allowing seamless reconnection after IP changes
Concurrency & Data Race Fixes
ClientRegistry.GetAllnow returns value copies instead of raw pointers, eliminating data races between the polling loop and concurrent registry writespollClientusesUpdateWorkingURLfor atomic updates instead of modifying potentially stale local copiesClientRegistry.RegisterpreservesPushMode,LastPushAt, andSecretwhen a client re-registers, preventing false offline detections- Push offline detection threshold raised to 30 s to tolerate network jitter with the 8 s push timeout
Client-side Reliability
- Fixed critical bug where
resp.Body.Close()was called before reading the body instartPeriodicRegistration, preventing TCPing config from ever updating - TCPing results are restored to the pending queue on transient push failures to prevent data loss
- Dedicated
pushHTTPClientwith 8 s timeout prevents the push loop from blocking on slow responses - Periodic re-registration interval reduced from 5 s to 60 s (push loop already maintains liveness)
📦 Docker Images
xhh1128/pulse:1.3.3xhh1128/pulse:latest
📥 Client Downloads
| Platform | File |
|---|---|
| Linux amd64 | probe-client |
| Linux arm64 | probe-client-arm64 |
| Windows amd64 | probe-client.exe |
| Install Script | install.sh |
Quick Install:
curl -sSL https://raw.githubusercontent.com/xhhcn/Pulse/main/client/install.sh | sudo bash -s -- --id YOUR_ID --server http://YOUR_SERVER:8008