add js class
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
# Architecture Documentation: NATSBridge
|
||||
|
||||
**Version**: 1.0.0
|
||||
**Date**: 2026-03-13
|
||||
**Version**: 1.1.0
|
||||
**Date**: 2026-03-15
|
||||
**Status**: Active
|
||||
**Ground Truth**: [`src/NATSBridge.jl`](../src/NATSBridge.jl)
|
||||
**Architecture Level**: C4 Container Level
|
||||
@@ -405,21 +405,68 @@ end
|
||||
|
||||
JavaScript uses async/await for non-blocking I/O:
|
||||
|
||||
- **Class-based NATS Client**: Connection management
|
||||
- **Class-based NATS Client**: Connection management with `keepAlive` support
|
||||
- **Module-level Utilities**: Serialization functions
|
||||
- **Native ArrayBuffer**: Binary data handling
|
||||
- **Native ArrayBuffer**: Binary data handling (Browser) / Buffer (Node.js)
|
||||
- **Fetch API**: HTTP file server communication
|
||||
- **Connection Pooling**: `NATSConnectionPool` for high-throughput scenarios
|
||||
|
||||
#### Node.js Implementation (natsbridge_ssr.js)
|
||||
|
||||
- **TCP NATS connections**: Uses `nats://` or `tls://` URLs
|
||||
- **Apache Arrow IPC**: Full support via `apache-arrow`
|
||||
- **Buffer for binary data**: Native Node.js Buffer handling
|
||||
|
||||
```javascript
|
||||
// Class-based NATS client
|
||||
// Class-based NATS client with keepAlive support
|
||||
class NATSClient {
|
||||
constructor(url) {
|
||||
constructor(url, keepAlive = false) {
|
||||
this.url = url;
|
||||
this.connection = null;
|
||||
this.keepAlive = keepAlive;
|
||||
}
|
||||
|
||||
async connect() {
|
||||
if (this.connection) return this.connection;
|
||||
this.connection = await nats.connect({ servers: this.url });
|
||||
return this.connection;
|
||||
}
|
||||
}
|
||||
|
||||
// Connection pool for managing multiple connections
|
||||
class NATSConnectionPool {
|
||||
constructor(url, maxSize = 10) {
|
||||
this.url = url;
|
||||
this.maxSize = maxSize;
|
||||
this.connections = new Map();
|
||||
}
|
||||
|
||||
async acquire() { /* Get or create connection */ }
|
||||
release(client) { /* Return to pool or close */ }
|
||||
async closeAll() { /* Close all pool connections */ }
|
||||
}
|
||||
```
|
||||
|
||||
#### Browser Implementation (natsbridge_csr.js)
|
||||
|
||||
- **WebSocket NATS connections**: Uses `ws://` or `wss://` URLs via `nats.ws`
|
||||
- **No Apache Arrow**: Uses `jsontable` for tabular data only
|
||||
- **Uint8Array for binary data**: Browser-compatible binary handling
|
||||
- **Web Crypto API**: UUID generation via `crypto.getRandomValues()`
|
||||
|
||||
```javascript
|
||||
// Class-based NATS client with keepAlive support
|
||||
class NATSClient {
|
||||
constructor(url, keepAlive = false) {
|
||||
this.url = url; // ws:// or wss://
|
||||
this.connection = null;
|
||||
this.keepAlive = keepAlive;
|
||||
}
|
||||
|
||||
async connect() {
|
||||
if (this.connection) return this.connection;
|
||||
this.connection = await nats.connect({ servers: this.url });
|
||||
return this.connection;
|
||||
}
|
||||
}
|
||||
```
|
||||
@@ -711,6 +758,10 @@ flowchart TD
|
||||
|
||||
| Date | Version | Changes |
|
||||
|------|---------|---------|
|
||||
| 2026-03-15 | 1.1.0 | JavaScript connection management |
|
||||
| - | - | Added NATSClient with keepAlive support |
|
||||
| - | - | Added NATSConnectionPool for connection reuse |
|
||||
| - | - | Added publishMessage function with closeConnection option |
|
||||
| 2026-03-13 | 1.0.0 | Initial architecture documentation |
|
||||
|
||||
---
|
||||
|
||||
Reference in New Issue
Block a user