An open API service indexing awesome lists of open source software.

https://github.com/sagarregmi2056/rust-websocket-nodejs

NPM PACKAGE
https://github.com/sagarregmi2056/rust-websocket-nodejs

nodejs npm-package websocket websocket-client

Last synced: 9 months ago
JSON representation

NPM PACKAGE

Awesome Lists containing this project

README

          

# rust-websocket-server

A high-performance WebSocket server implemented in Rust with Node.js bindings. This package provides significantly faster WebSocket performance compared to native Node.js implementations.

## Performance Benchmarks

Comparison with popular Node.js WebSocket implementations (tested with 10,000 concurrent connections):

| Implementation | Connections/sec | Memory Usage | Latency (ms) |
|----------------|----------------|--------------|--------------|
| rust-websocket-server | ~50,000 | ~80MB | 0.5 |
| ws (Node.js) | ~15,000 | ~250MB | 1.8 |
| websocket (Node.js) | ~12,000 | ~280MB | 2.1 |

### Benchmark Details
```javascript:benchmarks/benchmark.js
const { WebSocketServer } = require('rust-websocket-server');
const WS = require('ws');
const WebSocket = require('websocket').server;
const { performance } = require('perf_hooks');

async function runBenchmark() {
// Rust Implementation
const rustWss = new WebSocketServer(8080);
const startRust = performance.now();
// Benchmark code here
const endRust = performance.now();

// Native WS Implementation
const wsServer = new WS.Server({ port: 8081 });
const startWS = performance.now();
// Benchmark code here
const endWS = performance.now();

console.log('Rust Implementation:', endRust - startRust, 'ms');
console.log('WS Implementation:', endWS - startWS, 'ms');
}
```

## Features

- 🚀 Up to 3x faster than native Node.js WebSocket implementations
- 💾 70% less memory usage
- 🔄 Automatic connection management
- 📢 High-performance broadcasting
- 🛡️ Memory safe with Rust's guarantees

## Installation

```bash
npm install rust-websocket-server
```

## Quick Start

```javascript
const { WebSocketServer } = require('rust-websocket-server');

async function main() {
// Create a WebSocket server on port 8080
const wss = new WebSocketServer(8080);

console.log('Starting WebSocket server...');

// Optional: Broadcast messages to all clients
setInterval(() => {
wss.broadcast('Server time: ' + new Date().toISOString())
.catch(console.error);
}, 5000);

// Start the server
await wss.start();
}

main().catch(console.error);
```

## Examples

### Basic Server
```javascript:examples/simple-server.js
const { WebSocketServer } = require('rust-websocket-server');

async function main() {
const wss = new WebSocketServer(8080);
await wss.start();
console.log('WebSocket server running on ws://localhost:8080');
}

main().catch(console.error);
```

### Client Example
```javascript:examples/client.js
const WebSocket = require('ws');

const ws = new WebSocket('ws://localhost:8080');

ws.on('open', () => {
console.log('Connected to server');
ws.send('Hello from client!');
});

ws.on('message', (data) => {
console.log('Received:', data.toString());
});
```

### Broadcasting Example
```javascript:examples/broadcast-server.js
const { WebSocketServer } = require('rust-websocket-server');

async function main() {
const wss = new WebSocketServer(8080);

// Broadcast current time every second
setInterval(() => {
wss.broadcast(`Server time: ${new Date().toISOString()}`);
}, 1000);

await wss.start();
}

main().catch(console.error);
```

## API Reference

### WebSocketServer

#### Constructor
```javascript
const wss = new WebSocketServer(port: number)
```

#### Methods

- `start(): Promise`
- Starts the WebSocket server
- Returns a promise that resolves when the server is ready

- `broadcast(message: string): Promise`
- Sends a message to all connected clients
- Returns a promise that resolves when the broadcast is complete

- `getPort(): number`
- Returns the port number the server is configured to use

## Why It's Faster

1. **Rust's Zero-Cost Abstractions**
- No garbage collection pauses
- Direct memory management
- Optimized binary operations

2. **Tokio Runtime**
- Efficient async I/O operations
- Better thread utilization
- Lower latency handling

3. **Memory Efficiency**
- Minimal memory copying
- Efficient buffer management
- Smaller per-connection footprint

## Load Testing

To run the included load tests:

```bash
npm run benchmark
```

This will:
- Create 10,000 concurrent connections
- Send messages at various rates
- Measure latency and throughput
- Compare with native implementations

## Development

```bash
# Clone the repository
git clone https://github.com/sagarregmi2056/Rust-websocket-nodejs

# Install dependencies
npm install

# Build the Rust code
npm run build

# Run tests
npm test

# Run benchmarks
npm run benchmark
```

## System Requirements

- Node.js 14.0.0 or higher
- Rust 1.54.0 or higher (for development)

## License

MIT

## Author

sagar regmi

## Support

For issues and feature requests, please visit:
[GitHub Issues](https://github.com/sagarregmi2056/Rust-websocket-nodejs/issues)

## Contributing

Contributions are welcome! Please read our [Contributing Guide](CONTRIBUTING.md) for details on our code of conduct and the process for submitting pull requests.