@krunal_tarale-5/ultimate-streaming-package
Version:
🚀 Ultimate Real-Time Streaming Package v2.1.9 - Multi-Platform, Multi-Collection Architecture with Native MongoDB & MySQL Support, 99.96% Performance Improvement. Enterprise-grade real-time data streaming with Socket.IO integration, dynamic schema evolut
826 lines (679 loc) • 18.8 kB
Markdown
# 🔧 Integration Guide
**Complete integration guide for Ultimate Streaming Package v2.1.4**
## 🚀 **Framework Integration**
### Express.js Integration
```javascript
const express = require('express');
const UltimateStreamer = require('@krunal_tarale-5/ultimate-streaming-package');
const app = express();
// Initialize streaming package
async function initializeStreamer() {
try {
await UltimateStreamer.init({
dbType: 'mysql',
host: 'localhost',
port: 3306,
database: 'myapp',
user: 'root',
password: '',
enableCache: true
});
console.log('✅ Streaming package initialized');
// Set up real-time listeners
UltimateStreamer.on('orders', (data, meta) => {
console.log('Order update:', data.orderId, meta.changeType);
});
UltimateStreamer.on('users', (data, meta) => {
console.log('User update:', data.userId, meta.changeType);
});
} catch (error) {
console.error('Failed to initialize streamer:', error);
}
}
// Initialize on app start
initializeStreamer();
// API Routes
app.post('/api/orders', async (req, res) => {
try {
const result = await UltimateStreamer.push('orders', req.body);
res.json({ success: true, data: result });
} catch (error) {
res.status(500).json({ error: error.message });
}
});
app.get('/api/orders', async (req, res) => {
try {
const orders = await UltimateStreamer.get('orders', {
where: { status: req.query.status || 'pending' }
});
res.json(orders);
} catch (error) {
res.status(500).json({ error: error.message });
}
});
app.put('/api/orders/:orderId', async (req, res) => {
try {
const result = await UltimateStreamer.update('orders',
{ orderId: req.params.orderId },
req.body
);
res.json({ success: true, updated: result.found });
} catch (error) {
res.status(500).json({ error: error.message });
}
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});
```
### React Integration
```javascript
// App.js
import React, { useState, useEffect } from 'react';
import io from 'socket.io-client';
function App() {
const [orders, setOrders] = useState([]);
const [users, setUsers] = useState([]);
const [socket, setSocket] = useState(null);
useEffect(() => {
// Connect to Socket.IO server
const newSocket = io('http://localhost:3000');
setSocket(newSocket);
// Listen for real-time updates
newSocket.on('orders', (data) => {
setOrders(prev => [...prev, data]);
});
newSocket.on('users', (data) => {
setUsers(prev => [...prev, data]);
});
return () => newSocket.close();
}, []);
const createOrder = async (orderData) => {
try {
const response = await fetch('/api/orders', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(orderData)
});
const result = await response.json();
console.log('Order created:', result);
} catch (error) {
console.error('Error creating order:', error);
}
};
return (
<div>
<h1>Real-time Dashboard</h1>
<div>
<h2>Orders ({orders.length})</h2>
{orders.map(order => (
<div key={order.orderId}>
Order {order.orderId}: {order.status}
</div>
))}
</div>
<div>
<h2>Users ({users.length})</h2>
{users.map(user => (
<div key={user.userId}>
{user.name} ({user.email})
</div>
))}
</div>
<button onClick={() => createOrder({
orderId: 'ORD-' + Date.now(),
customerId: 'CUST-001',
total: 1500.00,
status: 'pending'
})}>
Create New Order
</button>
</div>
);
}
export default App;
```
### Next.js Integration
```javascript
// pages/api/orders.js
import UltimateStreamer from '@krunal_tarale-5/ultimate-streaming-package';
export default async function handler(req, res) {
if (req.method === 'POST') {
try {
const result = await UltimateStreamer.push('orders', req.body);
res.status(200).json({ success: true, data: result });
} catch (error) {
res.status(500).json({ error: error.message });
}
} else if (req.method === 'GET') {
try {
const orders = await UltimateStreamer.get('orders', {
where: { status: req.query.status || 'pending' }
});
res.status(200).json(orders);
} catch (error) {
res.status(500).json({ error: error.message });
}
} else {
res.setHeader('Allow', ['GET', 'POST']);
res.status(405).end(`Method ${req.method} Not Allowed`);
}
}
// pages/index.js
import { useState, useEffect } from 'react';
export default function Home() {
const [orders, setOrders] = useState([]);
useEffect(() => {
fetchOrders();
}, []);
const fetchOrders = async () => {
const response = await fetch('/api/orders');
const data = await response.json();
setOrders(data);
};
const createOrder = async () => {
const orderData = {
orderId: 'ORD-' + Date.now(),
customerId: 'CUST-001',
total: 1500.00,
status: 'pending'
};
await fetch('/api/orders', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(orderData)
});
fetchOrders(); // Refresh the list
};
return (
<div>
<h1>Orders Dashboard</h1>
<button onClick={createOrder}>Create Order</button>
{orders.map(order => (
<div key={order.orderId}>
Order {order.orderId}: {order.status} - ${order.total}
</div>
))}
</div>
);
}
```
### Vue.js Integration
```javascript
// main.js
import { createApp } from 'vue';
import App from './App.vue';
import io from 'socket.io-client';
const app = createApp(App);
// Provide Socket.IO instance
app.provide('socket', io('http://localhost:3000'));
app.mount('#app');
// App.vue
<template>
<div>
<h1>Real-time Dashboard</h1>
<div>
<h2>Orders ({{ orders.length }})</h2>
<div v-for="order in orders" :key="order.orderId">
Order {{ order.orderId }}: {{ order.status }}
</div>
</div>
<button @click="createOrder">Create Order</button>
</div>
</template>
<script>
import { ref, onMounted, inject } from 'vue';
export default {
setup() {
const orders = ref([]);
const socket = inject('socket');
onMounted(() => {
// Listen for real-time updates
socket.on('orders', (data) => {
orders.value.push(data);
});
});
const createOrder = async () => {
const orderData = {
orderId: 'ORD-' + Date.now(),
customerId: 'CUST-001',
total: 1500.00,
status: 'pending'
};
try {
const response = await fetch('/api/orders', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(orderData)
});
const result = await response.json();
console.log('Order created:', result);
} catch (error) {
console.error('Error creating order:', error);
}
};
return {
orders,
createOrder
};
}
};
</script>
```
## 🔌 **Socket.IO Integration**
### Server Setup
```javascript
const express = require('express');
const http = require('http');
const socketIo = require('socket.io');
const UltimateStreamer = require('@krunal_tarale-5/ultimate-streaming-package');
const app = express();
const server = http.createServer(app);
const io = socketIo(server, {
cors: {
origin: "http://localhost:3000",
methods: ["GET", "POST"]
}
});
// Initialize streaming package
async function initializeStreamer() {
try {
await UltimateStreamer.init({
dbType: 'mysql',
host: 'localhost',
port: 3306,
database: 'myapp',
user: 'root',
password: '',
enableCache: true
});
console.log('✅ Streaming package initialized');
// Set up real-time listeners and emit to Socket.IO clients
UltimateStreamer.on('orders', (data, meta) => {
console.log('Order update:', data.orderId, meta.changeType);
io.emit('orders', { data, meta });
});
UltimateStreamer.on('users', (data, meta) => {
console.log('User update:', data.userId, meta.changeType);
io.emit('users', { data, meta });
});
} catch (error) {
console.error('Failed to initialize streamer:', error);
}
}
// Socket.IO connection handling
io.on('connection', (socket) => {
console.log('Client connected:', socket.id);
socket.on('disconnect', () => {
console.log('Client disconnected:', socket.id);
});
// Handle client requests
socket.on('createOrder', async (orderData) => {
try {
const result = await UltimateStreamer.push('orders', orderData);
socket.emit('orderCreated', { success: true, data: result });
} catch (error) {
socket.emit('orderCreated', { success: false, error: error.message });
}
});
socket.on('getOrders', async (query) => {
try {
const orders = await UltimateStreamer.get('orders', query);
socket.emit('ordersData', orders);
} catch (error) {
socket.emit('ordersData', { error: error.message });
}
});
});
initializeStreamer();
server.listen(3001, () => {
console.log('Server running on port 3001');
});
```
### Client Setup
```javascript
// Client-side Socket.IO integration
import io from 'socket.io-client';
class RealTimeClient {
constructor() {
this.socket = io('http://localhost:3001');
this.setupListeners();
}
setupListeners() {
this.socket.on('connect', () => {
console.log('Connected to server');
});
this.socket.on('orders', (data) => {
console.log('Order update received:', data);
this.handleOrderUpdate(data);
});
this.socket.on('users', (data) => {
console.log('User update received:', data);
this.handleUserUpdate(data);
});
this.socket.on('orderCreated', (result) => {
if (result.success) {
console.log('Order created successfully:', result.data);
} else {
console.error('Failed to create order:', result.error);
}
});
}
createOrder(orderData) {
this.socket.emit('createOrder', orderData);
}
getOrders(query = {}) {
this.socket.emit('getOrders', query);
}
handleOrderUpdate(data) {
// Update your UI here
console.log('Processing order update:', data);
}
handleUserUpdate(data) {
// Update your UI here
console.log('Processing user update:', data);
}
}
// Usage
const client = new RealTimeClient();
// Create an order
client.createOrder({
orderId: 'ORD-001',
customerId: 'CUST-001',
total: 1500.00,
status: 'pending'
});
// Get orders
client.getOrders({ where: { status: 'pending' } });
```
## 🚀 **Production Deployment**
### Docker Setup
```dockerfile
# Dockerfile
FROM node:18-alpine
WORKDIR /app
# Copy package files
COPY package*.json ./
# Install dependencies
RUN npm ci --only=production
# Copy application code
COPY . .
# Expose port
EXPOSE 3000
# Start the application
CMD ["npm", "start"]
```
```yaml
# docker-compose.yml
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
environment:
- DB_HOST=mysql
- DB_PORT=3306
- DB_NAME=myapp
- DB_USER=root
- DB_PASSWORD=password
depends_on:
- mysql
networks:
- app-network
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: myapp
ports:
- "3306:3306"
volumes:
- mysql-data:/var/lib/mysql
networks:
- app-network
volumes:
mysql-data:
networks:
app-network:
driver: bridge
```
### Environment Configuration
```javascript
// config/database.js
const config = {
development: {
dbType: 'mysql',
host: 'localhost',
port: 3306,
database: 'myapp_dev',
user: 'root',
password: '',
enableCache: true,
debug: true
},
production: {
dbType: 'mysql',
host: process.env.DB_HOST,
port: parseInt(process.env.DB_PORT),
database: process.env.DB_NAME,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
enableCache: true,
debug: false,
maxConnections: 20,
acquireTimeout: 60000
}
};
module.exports = config[process.env.NODE_ENV || 'development'];
```
### PM2 Configuration
```javascript
// ecosystem.config.js
module.exports = {
apps: [{
name: 'ultimate-streaming-app',
script: 'server.js',
instances: 'max',
exec_mode: 'cluster',
env: {
NODE_ENV: 'development',
DB_HOST: 'localhost',
DB_PORT: 3306,
DB_NAME: 'myapp',
DB_USER: 'root',
DB_PASSWORD: ''
},
env_production: {
NODE_ENV: 'production',
DB_HOST: process.env.DB_HOST,
DB_PORT: process.env.DB_PORT,
DB_NAME: process.env.DB_NAME,
DB_USER: process.env.DB_USER,
DB_PASSWORD: process.env.DB_PASSWORD
}
}]
};
```
### Nginx Configuration
```nginx
# nginx.conf
server {
listen 80;
server_name your-domain.com;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
}
location /socket.io/ {
proxy_pass http://localhost:3001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
```
## 🔒 **Security Considerations**
### Authentication & Authorization
```javascript
// middleware/auth.js
const jwt = require('jsonwebtoken');
const authenticateToken = (req, res, next) => {
const authHeader = req.headers['authorization'];
const token = authHeader && authHeader.split(' ')[1];
if (!token) {
return res.sendStatus(401);
}
jwt.verify(token, process.env.JWT_SECRET, (err, user) => {
if (err) return res.sendStatus(403);
req.user = user;
next();
});
};
module.exports = { authenticateToken };
// Usage in routes
app.post('/api/orders', authenticateToken, async (req, res) => {
// Only authenticated users can create orders
const result = await UltimateStreamer.push('orders', {
...req.body,
createdBy: req.user.id
});
res.json({ success: true, data: result });
});
```
### Rate Limiting
```javascript
const rateLimit = require('express-rate-limit');
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minutes
max: 100, // limit each IP to 100 requests per windowMs
message: 'Too many requests from this IP'
});
app.use('/api/', limiter);
```
### Input Validation
```javascript
const Joi = require('joi');
const orderSchema = Joi.object({
orderId: Joi.string().required(),
customerId: Joi.string().required(),
total: Joi.number().positive().required(),
status: Joi.string().valid('pending', 'shipped', 'delivered').required()
});
app.post('/api/orders', async (req, res) => {
const { error, value } = orderSchema.validate(req.body);
if (error) {
return res.status(400).json({ error: error.details[0].message });
}
const result = await UltimateStreamer.push('orders', value);
res.json({ success: true, data: result });
});
```
## 📊 **Monitoring & Logging**
### Application Monitoring
```javascript
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.combine(
winston.format.timestamp(),
winston.format.json()
),
transports: [
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' })
]
});
if (process.env.NODE_ENV !== 'production') {
logger.add(new winston.transports.Console({
format: winston.format.simple()
}));
}
// Usage in streaming package
UltimateStreamer.on('orders', (data, meta) => {
logger.info('Order update', {
orderId: data.orderId,
changeType: meta.changeType,
timestamp: new Date()
});
});
```
### Performance Monitoring
```javascript
const performance = require('perf_hooks');
// Monitor streaming performance
const streamStart = performance.now();
UltimateStreamer.on('orders', (data, meta) => {
const streamTime = performance.now() - streamStart;
logger.info('Streaming performance', {
orderId: data.orderId,
streamTime: streamTime,
changeType: meta.changeType
});
});
```
## 🔧 **Troubleshooting**
### Common Issues
**1. Connection Timeout**
```javascript
// Increase timeout settings
await UltimateStreamer.init({
// ... other config
acquireTimeout: 120000, // 2 minutes
maxConnections: 50
});
```
**2. Memory Issues**
```javascript
// Monitor memory usage
setInterval(() => {
const memUsage = process.memoryUsage();
console.log('Memory usage:', {
rss: `${Math.round(memUsage.rss / 1024 / 1024)} MB`,
heapTotal: `${Math.round(memUsage.heapTotal / 1024 / 1024)} MB`,
heapUsed: `${Math.round(memUsage.heapUsed / 1024 / 1024)} MB`
});
}, 60000);
```
**3. Socket.IO Connection Issues**
```javascript
// Client-side reconnection
const socket = io('http://localhost:3001', {
reconnection: true,
reconnectionDelay: 1000,
reconnectionDelayMax: 5000,
maxReconnectionAttempts: 5
});
socket.on('connect_error', (error) => {
console.error('Connection error:', error);
});
socket.on('reconnect', (attemptNumber) => {
console.log('Reconnected after', attemptNumber, 'attempts');
});
```
## 📚 **Next Steps**
1. **Choose your framework** from the examples above
2. **Set up Socket.IO** for real-time communication
3. **Deploy to production** using the deployment guides
4. **Monitor performance** with the monitoring tools
5. **Secure your application** with authentication and validation
## 🤝 **Need Help?**
- **Documentation**: [Complete Documentation](../)
- **GitHub Issues**: [Report bugs or request features](https://github.com/krunal-tarale/ultimate-streaming-package/issues)
- **Email Support**: [krunaltarale555@gmail.com](mailto:krunaltarale555@gmail.com)
---
**Ready to integrate Ultimate Streaming Package into your application?** 🚀
```bash
npm install @krunal_tarale-5/ultimate-streaming-package@2.1.4
```