Open ZhengXingchi opened 4 years ago
SSE 使用 HTTP 协议,现有的服务器软件都支持。WebSocket 是一个独立协议。 SSE 属于轻量级,使用简单;WebSocket 协议相对复杂。 SSE 默认支持断线重连,WebSocket 需要自己实现。 SSE 一般只用来传送文本,二进制数据需要编码后传送,WebSocket 默认支持传送二进制数据。 SSE 支持自定义发送的消息类型。
var http = require("http");
http.createServer(function (req, res) {
var fileName = "." + req.url;
console.log(fileName, '444')
if (fileName === "./stream") {
res.writeHead(200, {
"Content-Type": "text/event-stream",
"Cache-Control": "no-cache",
"Connection": "keep-alive",
"Access-Control-Allow-Origin": '*'
});
res.write("retry: 10000\n");
res.write("event: connecttime\n");
res.write("data: " + 'connecttime111' + "\n\n");
res.write("data: " + 'message111' + "\n\n");
interval = setInterval(function () {
res.write("data: " + (new Date()) + "\n\n");
}, 1000);
req.connection.addListener("close", function () {
clearInterval(interval);
}, false);
}
}).listen(8844, "127.0.0.1");
Server-Sent Events 客户端
if ('EventSource' in window) {
console.log('1111')
var source = new EventSource('http://127.0.0.1:8844/stream')
source.addEventListener('open', function (event) {
console.log('连接到服务器')
}, false)
source.onmessage = function (event) {
console.log('<p>Ping: ' + event.data + '</p>');
};
source.addEventListener('connecttime', function (event) {
var data = event.data;
console.log('connecttime' + data)
// handle message
}, false);
}
参考文献
Server-Sent Events 教程