@emanuelepifani/nexo-client
v0.5.0
Published
High-performance TypeScript Client for Nexo Broker
Maintainers
Readme
Nexo Client SDK
High-performance TypeScript client for Nexo.
Quick Start
Run server
docker run -p 7654:7654 -p 8080:8080 emanuelepifani/nexo:latestThis exposes:
- Port 7654 (TCP): Main server socket for SDK clients.
- Port 8080 (HTTP): Web Dashboard with status of all brokers.
Install SDK
npm install @emanuelepifani/nexo-clientConnection
const client = await NexoClient.connect({ host: 'localhost', port: 7654 });1. STORE
// Set key
await client.store.map.set("user:1", { name: "Max", role: "admin" });
// Get key
const user = await client.store.map.get<User>("user:1");
// Del key
await client.store.map.del("user:1");2. QUEUE
// Create queue
const mailQ = await client.queue<MailJob>("emails").create();
// Push message
await mailQ.push({ to: "[email protected]" });
// Subscribe
await mailQ.subscribe((msg) => console.log(msg));
// Delete queue
await mailQ.delete();3. PUB/SUB
// Define topic (not need to create, auto-created on first publish)
const alerts = client.pubsub<AlertMsg>("system-alerts");
// Subscribe
await alerts.subscribe((msg) => console.log(msg));
// Publish
await alerts.publish({ level: "high" });4. STREAM
// Create topic
const stream = await client.stream<UserEvent>('user-events').create();
// Publisher
await stream.publish({ type: 'login', userId: 'u1' });
// Consumer (must specify group)
await stream.subscribe('analytics', (msg) => {console.log(`User ${msg.userId} performed ${msg.type}`); });
// Delete topic
await stream.delete();Binary Payloads
All Nexo brokers (Store, Queue, Stream, PubSub) natively support raw binary data (Buffer).
Bypassing JSON serialization drastically reduces Latency, increases Throughput, and saves Bandwidth.
Perfect for: Video chunks, Images, Protobuf/MsgPack, Encrypted blobs.
// Send 1MB raw buffer (30% smaller than JSON/Base64)
const heavyPayload = Buffer.alloc(1024 * 1024);
// 1. STREAM
await client.stream('cctv-archive').publish(heavyPayload);
// 2. PUBSUB
await client.pubsub('live-audio-call').publish(heavyPayload);
// 3. STORE
await client.store.map.set('user:avatar:1', heavyPayload);
// 4. QUEUE
await client.queue('pdf-processing').push(heavyPayload);License
MIT
Links
- 📚 Full Documentation: Nexo Docs
- 🐳 Docker Image: emanuelepifani/nexo
Author
Built by Emanuel Epifani.
