Skip to content

Release v1.3.3

Choose a tag to compare

@github-actions github-actions released this 17 Feb 23:03
· 247 commits to main since this release

🚀 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.GetAll now returns value copies instead of raw pointers, eliminating data races between the polling loop and concurrent registry writes
  • pollClient uses UpdateWorkingURL for atomic updates instead of modifying potentially stale local copies
  • ClientRegistry.Register preserves PushMode, LastPushAt, and Secret when 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 in startPeriodicRegistration, preventing TCPing config from ever updating
  • TCPing results are restored to the pending queue on transient push failures to prevent data loss
  • Dedicated pushHTTPClient with 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.3
  • xhh1128/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