sse
1
总安装量
1
周安装量
#51337
全站排名
安装命令
npx skills add https://github.com/g1joshi/agent-skills --skill sse
Agent 安装分布
mcpjam
1
claude-code
1
replit
1
junie
1
zencoder
1
Skill 文档
Server-Sent Events (SSE)
SSE allow a web page to get updates from a server. Unlike WebSockets, SSEs are unidirectional (Server -> Client) and use standard HTTP.
When to Use
- Live Feeds: News tickers, Sport scores, Stock prices.
- Progress Updates: “Processing Import: 45%…”, Logging streams.
- Notifications: In-app alerts where the user doesn’t need to reply instantly via the same channel.
- Replacement for Polling: More efficient than asking “Are we there yet?” every second.
Quick Start
// Client
const evtSource = new EventSource("/api/events");
evtSource.onmessage = (event) => {
const data = JSON.parse(event.data);
console.log("Update:", data);
};
// Server (Express)
app.get("/api/events", (req, res) => {
// Headers to keep connection open
res.setHeader("Content-Type", "text/event-stream");
res.setHeader("Cache-Control", "no-cache");
res.setHeader("Connection", "keep-alive");
setInterval(() => {
// Format: "data: <payload>\n\n"
res.write(`data: ${JSON.stringify({ time: new Date() })}\n\n`);
}, 1000);
});
Core Concepts
Event Stream Format
Plain text. Fields: event, data, id, retry.
event: update
data: {"value": 42}
data: This is a default message
Auto-Reconnection
Browsers automatically try to reconnect if the connection drops. The server can send a retry: 5000 field to control the delay.
Common Patterns
Connection Limit
Browsers (HTTP/1.1) limit concurrent connections (usually 6) per domain. Using HTTP/2 solves this (Multi-plexing).
Best Practices
Do:
- Use HTTP/2 to avoid connection limits.
- Send Hearbeats (comments
: ping) to prevent proxies from killing idle connections. - Use the
Last-Event-IDheader to resume streams after incorrect.
Don’t:
- Don’t use for Gaming/Chat (Latency and bidirectionality needs WebSockets).
- Don’t send huge binary blobs (It’s text-based).
Troubleshooting
| Error | Cause | Solution |
|---|---|---|
Buffered Response |
Nginx/Proxy buffering the stream. | Disable proxy buffering (X-Accel-Buffering: no). |
Cors Error |
Standard CORS rules apply. | Configure Access-Control headers. |