相关文章
http推送与websocket推送
一、HTTP/2推送:
HTTP/2推送是基于HTTP/2协议的一种机制,它允许服务器在响应请求时主动向客户端推送额外的资源。
客户端发起一个请求,服务器不仅会返回请求的响应,还会额外推送一些相关资源,这些资源可能是客户端之后需要的,从而减少了客户端发起请求的次数,提高了性能。
HTTP/2推送依赖于HTTP/2协议的多路复用(Multiplexing)和头部压缩(Header Compression)等特性,因此能够有效减少网络延迟。
HTTP/2推送适用于静态资源的提前推送,例如HTML页面中引用的CSS、JavaScript、图像等资源。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| const http2 = require('http2'); const fs = require('fs');
const server = http2.createSecureServer({ key: fs.readFileSync('server.key'), cert: fs.readFileSync('server.crt') });
server.on('request', (req, res) => { res.writeHead(200, {'Content-Type': 'text/html'}); res.end('<html><head><title>HTTP/2 Push Demo</title></head><body><h1>HTTP/2 Push Demo</h1></body></html>');
const stream = res.push('/style.css', { status: 200, method: 'GET', request: { accept: '*/*' }, response: { 'content-type': 'text/css' } }); stream.end('.header { font-size: 20px; }'); });
server.listen(3000, () => { console.log('Server is running on port 3000'); });
|
在这个示例中,我们创建了一个HTTP/2服务器,并为根路径的请求返回一个简单的HTML页面。同时,我们使用res.push()方法推送了一个CSS文件。
二、WebSocket推送:
WebSocket是一种独立的协议,它建立在TCP上,旨在在客户端和服务器之间实现全双工通信。
WebSocket允许客户端和服务器之间建立长期的连接,并在连接建立后通过双向通信实时地传输数据。
客户端和服务器可以随时向对方发送数据,无需等待对方的请求。
WebSocket推送适用于需要实时双向通信的应用场景,例如在线聊天、实时游戏、实时股票行情等。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', function connection(ws) { console.log('Client connected');
const interval = setInterval(() => { ws.send('WebSocket Push Example Message'); }, 1000);
ws.on('close', function() { console.log('Client disconnected'); clearInterval(interval); }); });
console.log('WebSocket server is running on port 8080');
|
在这个示例中,我们创建了一个WebSocket服务器,并监听连接事件。每隔1秒,服务器会向连接的客户端发送一条消息。当客户端关闭连接时,服务器会停止发送消息。