HTML 5 服务器推送事件server-sent event(一)

HTML5 服务器推送事件(server-sent event)允许网页获得来自服务器的更新。
1.Server-Sent 事件 - 单向消息传递
2.传递 文本内容
与websocket对比
websocket双向传递,可传递二进制数据
可进入http://www.caniuse.com网站检查eventsource是否被浏览器所支持

sse优点:
1.不需添加任何新组件,
2.服务端简洁,不像websocket很复杂
3.可在现有http/https上运作,直接运行现有代理服务器和认证技术
sse缺点
1.sse连接会使用一个套接字,还会占用apache线程或进程,这样会使用大量内存,并限制服务器所能支持的并行数
因此,必须写自已的后端服务器

现在来看一个简单的例子
Server部分
/**
 * Created by candy on 2017/6/29.
 */
const http=require("http")
const fs=require("fs")

http.createServer(function(request,response){
    if (request.url!='/sse'){
        fs.readFile("sse01.html",function(err,file){
            response.writeHead(200,{"Content-Type":"text/html"});
            let s = file.toString()
            response.end(s)
        })
    }else{//此部分为发送消息部分
        response.writeHead(200,{"Content-Type":"text/event-stream"}) //注意此处要为text/event-stream
        let timer =setInterval(function(){ //每一秒送一次时间
            let content="data:"+new Date().toISOString()+"\n\n";
            let b =response.write(content);
            if (!b) console.log("data quered("+content+")")//在这里log看消息是否已发送
            else console.log("flushed ("+content+")")

        },1000);
        request.connection.on("close",function(){//连接关闭时要消除
            response.end();
            clearInterval(timer);
            console.log("client close connection.")
        })
        request.connection.on("error",function(){
            response.end();
            clearInterval(timer);
            console.log("client error connection.")
        })
    }

}).listen(8444);
console.log("runinng server")

Client部份
<!doctype html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>hello world</title>
    </head>
    <body>
    <h1>hello world</h1>
        <pre id="x">initialize....</pre>

    </body>
<script>
    let es =new EventSource("sse");//在这创建一个eventsource
    es.addEventListener("message",function(e){ //接收message
        let data= e.data;
        document.getElementById("x").innerHTML= data;
    })
</script>
</html>
    

这样就是一个简单sse,执行后网页上每秒的时间会变化

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值