ZhengXingchi / ZhengXingchi.github.io

Apache License 2.0
0 stars 0 forks source link

说说长连接,websocket以及Server-Sent Events的区别 #65

Open ZhengXingchi opened 4 years ago

ZhengXingchi commented 4 years ago

参考文献

Server-Sent Events 教程

ZhengXingchi commented 4 years ago

Server-Sent Events

SSE 使用 HTTP 协议,现有的服务器软件都支持。WebSocket 是一个独立协议。 SSE 属于轻量级,使用简单;WebSocket 协议相对复杂。 SSE 默认支持断线重连,WebSocket 需要自己实现。 SSE 一般只用来传送文本,二进制数据需要编码后传送,WebSocket 默认支持传送二进制数据。 SSE 支持自定义发送的消息类型。

ZhengXingchi commented 4 years ago

Server-Sent Events 服务器

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");
ZhengXingchi commented 4 years ago

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);
    }
ZhengXingchi commented 4 years ago

http1.0与http1.1以及http2.0