diff --git a/differences.md b/differences.md index 1a921ba..fc3cad3 100644 --- a/differences.md +++ b/differences.md @@ -11,7 +11,7 @@ | Feature | Go | .NET | Notes | |---------|:--:|:----:|-------| | NKey generation (server identity) | Y | Y | Ed25519 key pair via NATS.NKeys at startup | -| System account setup | Y | Y | `$SYS` account created; no event publishing yet (stub) | +| System account setup | Y | Y | `$SYS` account with InternalEventSystem, event publishing, request-reply services | | Config file validation on startup | Y | Y | Full config parsing with error collection via `ConfigProcessor` | | PID file writing | Y | Y | Written on startup, deleted on shutdown | | Profiling HTTP endpoint (`/debug/pprof`) | Y | Stub | `ProfPort` option exists but endpoint not implemented | @@ -64,9 +64,9 @@ | ROUTER | Y | N | Excluded per scope | | GATEWAY | Y | N | Excluded per scope | | LEAF | Y | N | Excluded per scope | -| SYSTEM (internal) | Y | N | | +| SYSTEM (internal) | Y | Y | InternalClient + InternalEventSystem with Channel-based send/receive loops | | JETSTREAM (internal) | Y | N | | -| ACCOUNT (internal) | Y | N | | +| ACCOUNT (internal) | Y | Y | Lazy per-account InternalClient with import/export subscription support | | WebSocket clients | Y | N | | | MQTT clients | Y | N | | @@ -218,7 +218,7 @@ Go implements a sophisticated slow consumer detection system: |---------|:--:|:----:|-------| | Per-account SubList isolation | Y | Y | | | Multi-account user resolution | Y | Y | `AccountConfig` per account in `NatsOptions.Accounts`; `GetOrCreateAccount` wires limits | -| Account exports/imports | Y | N | | +| Account exports/imports | Y | Y | ServiceImport/StreamImport with ExportAuth, subject transforms, response routing | | Per-account connection limits | Y | Y | `Account.AddClient()` returns false when `MaxConnections` exceeded | | Per-account subscription limits | Y | Y | `Account.IncrementSubscriptions()` enforced in `ProcessSub()` | | Account JetStream limits | Y | N | Excluded per scope | @@ -406,6 +406,11 @@ The following items from the original gap list have been implemented: - **User revocation** — per-account tracking with wildcard (`*`) revocation - **Config file parsing** — custom lexer/parser ported from Go; supports includes, variables, nested blocks, size suffixes - **Hot reload (SIGHUP)** — re-parses config, diffs changes, validates reloadable set, applies with CLI precedence +- **SYSTEM client type** — InternalClient with InternalEventSystem, Channel-based send/receive loops, event publishing +- **ACCOUNT client type** — lazy per-account InternalClient with import/export subscription support +- **System event publishing** — connect/disconnect advisories, server stats, shutdown/lame-duck events, auth errors +- **System request-reply services** — $SYS.REQ.SERVER.*.VARZ/CONNZ/SUBSZ/HEALTHZ/IDZ/STATSZ with ping wildcards +- **Account exports/imports** — service and stream imports with ExportAuth, subject transforms, response routing, latency tracking ### Remaining Lower Priority 1. **Dynamic buffer sizing** — delegated to Pipe, less optimized for long-lived connections