一键导入
sse-scaling
Scaling SSE for high-concurrency social apps. Covers pub/sub patterns, Redis integration, fan-out strategies, and production limits.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Scaling SSE for high-concurrency social apps. Covers pub/sub patterns, Redis integration, fan-out strategies, and production limits.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | sse-scaling |
| description | Scaling SSE for high-concurrency social apps. Covers pub/sub patterns, Redis integration, fan-out strategies, and production limits. |
| triggers | ["sse scale","sse production","sse redis","sse concurrent","scale sse","redis pub sub"] |
From MVP to production: Handle 100+ concurrent users with low latency.
Using EventEmitter for single-server setups:
import { EventEmitter } from 'events';
const notificationEmitter = new EventEmitter();
// Listener in route handler
notificationEmitter.on('notification', (data) => {
controller.enqueue(encoder.encode(`data: ${JSON.stringify(data)}\n\n`));
});
// Trigger from other route
notificationEmitter.emit('notification', { userId, message });
Limitations: Single process only, loses messages on server restart.
Broadcast events across multiple server instances:
import Redis from 'ioredis';
const redis = new Redis();
// In route handler: Subscribe to channel
redis.subscribe(`notifications:${userId}`, (err, count) => {
if (err) controller.error(err);
});
// Receive messages
redis.on('message', (channel, message) => {
controller.enqueue(encoder.encode(`data: ${message}\n\n`));
});
// Trigger from elsewhere
redis.publish(`notifications:${userId}`, JSON.stringify({ type: 'like', userId: 1 }));
Benefits: Works across multiple server instances, persistent message broker.
Send same message to multiple recipients efficiently:
// In Payload hook: Broadcast to all followers
const followers = await getFollowers(postAuthorId);
for (const follower of followers) {
await redis.publish(
`notifications:${follower.id}`,
JSON.stringify({ type: 'new-post', postId, authorId })
);
}
| Plan | Timeout | Concurrent Connections |
|---|---|---|
| Pro | 60s | Limited by runtime |
| Enterprise | 900s (15m) | Limited by runtime |
| Fluid Compute | Unlimited | Scales dynamically |
Default file descriptor limit: 1024 connections per process.
Increase for production:
# Linux: Check current limit
ulimit -n
# Increase to 65536
ulimit -n 65536
Estimate ~50KB-100KB per active SSE connection. For 1000 users:
# sse-load-test.yml
config:
target: 'http://localhost:3000'
phases:
- duration: 60
arrivalRate: 10
scenarios:
- name: 'SSE Connection Test'
flow:
- get:
url: '/api/notifications'
capture:
- json: '$.message'
Run:
artillery run sse-load-test.yml
# Spawn 100 concurrent connections
for i in {1..100}; do
curl -N http://localhost:3000/api/notifications &
done
Reuse Redis connections across instances:
const redis = new Redis({
host: process.env.REDIS_HOST,
maxRetriesPerRequest: null, // Important for pub/sub
enableReadyCheck: false,
});
Batch multiple notifications into single message:
const batch = await collectNotificationsForMs(100); // Wait 100ms for batch
redis.publish(
`notifications:${userId}`,
JSON.stringify({ batch: batch })
);
Only send to users who care about event type:
// In hook: Get only users interested in this notification type
const subscribers = await getSubscribers(userId, 'likes');
for (const subscriber of subscribers) {
redis.publish(`notifications:${subscriber.id}`, JSON.stringify(notification));
}
console.log(`[SSE] Client connected: ${clientId}`);
console.log(`[SSE] Published to ${recipientCount} users`);
console.log(`[SSE] Client ${clientId} disconnected after ${connectionDuration}ms`);
Prompt: "Refactor my SSE code to use Redis pub/sub for scaling across multiple server instances."
Prompt: "Write a load test for SSE that simulates 1000 concurrent users connecting and receiving notifications."
Prompt: "How can I optimize SSE delivery to reduce latency when broadcasting to 10,000 users?"
Use Case diagram specialist for researching, analyzing, and building UML Use Case diagrams (actors, use cases, include/extend, system boundary) and Use Case Specifications
Mermaid diagram specialist for creating flowcharts, sequence diagrams, ERDs, and architecture visualizations
Use AI to accelerate SSE development. Includes prompt templates for code generation, refactoring, testing, and architectural decisions.
Core implementation of Server-Sent Events (SSE) for realtime one-way communication in Next.js. Basic patterns for setup, message format, and client consumption.
Debugging and error handling for SSE streams. Addresses common pitfalls including Vercel buffering, timeouts, connection drops, and reconnection strategies.
Integrate SSE with Payload CMS for realtime updates. Covers afterChange hooks to trigger events, authenticated routes, and real-time social app features.