sse

web workers sse websocket

  • web workers
: 单独开一个线程,进行大量数据的处理



特点: 单向通道,建立连接后,只能服务器想客户端发送消息
如果客户端需要想服务器发送消息,需要新的http请求,这对比websocket开销更大

SSE本质是发送的不是一次性的数据包,而是一个数据流
因为ie上的XMLHttpRequest对象不支持获取部分的响应内容,只有在响应完成之后才能获取其内容。

sse最大优势:
sse可以利用原先的http协议
1 基与http协议,不需要服务器单独支持,存在基础设施优势

  • websocket
1、全双工通信的,可以很方便的实现两端的自由交流。
2、二进制协议,对于二进制数据传输更合适
3、 频率大于1次/秒,甚至更频繁,WebSocket更适合
 
缺点:
1 需要服务器支持


实现对比

分析短轮询长轮询web socketsse
通讯方式httphttp基于TCP长连接通讯http
触发方式轮询轮询事件事件
优点兼容好容错性强,实现简单http全双工通讯协议,性能开销小、安全性高,有一定可扩展性实现简便,开发成本低
缺点安全性差,占较多的内存资源与请求数安全性差,占较多的内存资源与请求数传输数据需要进行二次解析,增加开发成本及难度只适用高级浏览器
适用范围b/s服务b/s服务网络游戏、银行交互和支付服务端到客户端单向推送
分析轮询web socketsse
服务器部署noyesno
浏览器兼容性good许多现代浏览器支持高级浏览器,ie不支持
后端推送yesyesno
  • 如何选择
1 数据够频繁:数据推送,(例如几分钟一个这种,直接用数据拉取的方式更好,这样可以减少服务器资源占用)

2 数据频率:如果发送频率大于1次/秒,甚至更频繁,WebSocket更适合

3 是否需要二进制数据交流,如果有大量二进制数据需要传输,用WebSocket

4 如果大部分用户是移动用户,用数据推送


ifame

https://www.jb51.net/article/116273.htm

event source

https://segmentfault.com/a/1190000009276347

  • 代码实现
var express = require('express')
var fs = require('fs')
var app = express()

app.get('/count', function(req, res) {
    console.log(111)

    res.writeHead(200, {
        "Content-Type":"text/event-stream", 
        "Cache-Control":"no-cache", 
    });
    let count = 0

    interval = setInterval(function() {
        res.write("data: " + (++count) + "\n\n");
    }, 3000);

    req.connection.addListener("close", function () {
        clearInterval(interval);
    }, false);
})

app.use(function(req, res) {
    fs.readFile('./static/test.html', 'utf8',function(err, html) {
        if (err) {
            console.log(err)
            return
        }
        res.send(html)
    })
})

app.listen(4000, function(err) {
    if (err) {
        console.log(err)
        return
    }
    console.log('listening on port 4000')
})



  • 短轮训
定时器,发http请求

缺点:
1 固定频率发请求,数据可能没更新,浪费带宽,
2 假死状态,主线程遇到大量任务,导致setTimeout未按时执行发请求,无法响应


  • 长轮询
同样是定时发请求,只是服务端不会立即返回数据而已
等数据更新才返回

缺点:
1、保持连接会消耗资源。
2、服务器没有返回有效数据,程序超时。
  • iframe

1、IE、Mozilla Firefox会显示加载没有完成,图标会不停旋转。

2、服务器维护一个长连接会增加开销


参考文章

https://www.jianshu.com/p/ef054d3d1b62

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值