Server-Sent Events(SSE)是一种浏览器和服务器之间实现实时通信的技术。它允许服务器向客户端发送单向的消息流,这些消息可以是事件、通知或数据。SSE 的一个重要特点是能够处理并发和事务。
并发处理
在 SSE 中,服务器可以同时向多个客户端发送消息,并且每个客户端可以同时接收多个消息。这种并发处理能力使得 SSE 很适合实时通信的场景,例如聊天室、股票行情等。
下面是一个使用 SSE 实现聊天室的示例代码:
// javascriptcn.com 代码示例 const http = require('http'); const fs = require('fs'); const server = http.createServer((req, res) => { if (req.url === '/') { res.writeHead(200, { 'Content-Type': 'text/html' }); fs.createReadStream(__dirname + '/index.html').pipe(res); } else if (req.url === '/sse') { res.writeHead(200, { 'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache', 'Connection': 'keep-alive' }); setInterval(() => { const data = { message: `Hello, ${new Date().toLocaleTimeString()}` }; res.write(`data: ${JSON.stringify(data)}\n\n`); }, 1000); } else { res.writeHead(404); res.end(); } }); server.listen(3000, () => { console.log('Server started on port 3000'); });
在这个示例中,当客户端连接到 /sse
路径时,服务器会向客户端发送一个每秒钟更新一次的消息流。客户端可以通过 EventSource API 接收消息:
const source = new EventSource('/sse'); source.onmessage = event => { const data = JSON.parse(event.data); console.log(data.message); };
这个示例展示了 SSE 的并发处理能力,服务器可以同时向多个客户端发送消息,并且每个客户端可以同时接收多个消息。
事务处理
在 SSE 中,服务器可以保证消息的顺序性和可靠性,这是通过将每个消息的 ID 和事件类型发送给客户端来实现的。客户端可以根据这些信息来处理消息,并确保消息的顺序性和可靠性。
下面是一个使用 SSE 实现股票行情推送的示例代码:
// javascriptcn.com 代码示例 const http = require('http'); const fs = require('fs'); const server = http.createServer((req, res) => { if (req.url === '/') { res.writeHead(200, { 'Content-Type': 'text/html' }); fs.createReadStream(__dirname + '/index.html').pipe(res); } else if (req.url === '/sse') { let id = 0; res.writeHead(200, { 'Content-Type': 'text/event-stream', 'Cache-Control': 'no-cache', 'Connection': 'keep-alive' }); setInterval(() => { const data = { id: ++id, price: Math.random() * 100 }; res.write(`id: ${id}\n`); res.write(`event: price\n`); res.write(`data: ${JSON.stringify(data)}\n\n`); }, 1000); } else { res.writeHead(404); res.end(); } }); server.listen(3000, () => { console.log('Server started on port 3000'); });
在这个示例中,当客户端连接到 /sse
路径时,服务器会向客户端发送一个每秒钟更新一次的消息流。每个消息都有一个 ID 和事件类型,客户端可以根据这些信息来处理消息。
客户端可以通过 EventSource API 接收消息,并处理消息:
// javascriptcn.com 代码示例 const source = new EventSource('/sse'); let lastId = 0; source.addEventListener('price', event => { const data = JSON.parse(event.data); if (data.id === lastId + 1) { console.log(`Price: ${data.price}`); lastId = data.id; } else { console.log(`Missed message: ${lastId + 1}`); } });
这个示例展示了 SSE 的事务处理能力,服务器可以保证消息的顺序性和可靠性,客户端可以根据消息的 ID 和事件类型来处理消息,并确保消息的顺序性和可靠性。
总结
Server-Sent Events 是一种浏览器和服务器之间实现实时通信的技术,它具有并发处理和事务处理的能力。并发处理能力使得 SSE 很适合实时通信的场景,例如聊天室、股票行情等;事务处理能力使得 SSE 可以保证消息的顺序性和可靠性,客户端可以根据消息的 ID 和事件类型来处理消息,并确保消息的顺序性和可靠性。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/650e436a95b1f8cacd780fca