所有分类
  • 所有分类
  • 后端开发
HTML5 新技能 Server-SentEvents(SSE):高效数据推送的新选择

HTML5 新技能 Server-SentEvents(SSE):高效数据推送的新选择

1:轮询是由客户端发起的,那么在服务端就不能判别我要推送的内容是否已经过期,因为我很难判断某个信息是否已经推送给全部的客户端,那么服务端就需要缓存大量的数据。基于数据推送是这样的,当数据源有新数据,它马上发送到客户端,不需要等待客户端请求。

如今可是数字化时代,实时数据超级关键。身为程序员的我最近了解到一个叫做Server-SentEvents(SSE)的HTML5新技能。今儿个就跟大家分享下我用SSE的体验咯。

SSE与传统技术的对比

HTML5 新技能 Server-SentEvents(SSE):高效数据推送的新选择

之前试过轮询跟Comet,轮询犯愁,费劲儿又慢。尤其是用手机的时候,这些数据交流让电池烧得飞快。Comet倒是能主动推送消息,但它搞的是HTTP那种老套长连接,效率低下。

WebSocket与SSE的选择

你知道WebSocket吗?它的确可以来回沟通滴,但是在我们只想服务端单向催发消息时,感觉就有些浪费了!SSE这个功能就实用多了,服务端只管发数据,客户端也省心不少。

HTML5 新技能 Server-SentEvents(SSE):高效数据推送的新选择

SSE的工作原理

SSE(Server-SentEvents)就是用EventSourceAPI和text/event-streamMIME这两大神器实现的。咱们只需弄个EventSource对象,指定下服务器地址,客户端就可以接收服务器传来的数据。服务器会按格式将文本信息发送到该URL,每条消息后面都会加上两个回车符号作为结尾。然后客户端只要监听onmessage事件,就可以轻松处理这些收到的数据了~

SSE的实际应用

HTML5 新技能 Server-SentEvents(SSE):高效数据推送的新选择

你知道吗?我搞的那个项目里面,SSE(Server-SentEvents)用得特别顺手。它可以快速给每个用户推送最新的股价和新闻。只要有新数据进来,服务器就会立即发送给所有在线的人,这样就既不浪费网速,还让大家感觉更舒服。

SSE的局限性

告诉你,SSE虽然强大到能把实时数据传过来,可它却不能让客户端跟服务器对话。想聊天?那得试试WebSocket这类新东西。至于SSE,主要还是靠HTTP搞事儿。可惜这样的话,在某些像防火墙这样的网络设备上就没辙这也算它的一点小瑕疵。

与数据库的交互

有了SSE,咱们还得顾着和数据库玩玩儿!数据能马上看见,所以要确保数据库速度快,查东西可别耽误了实时性!

var evtSource = new EventSource("ssedemo.php");

SSE的最佳实践

为了让我们的SSE更高效,我们得在服务器那头搞个好点的缓存策略,别老重复发送同样的信息。客户端也记得把数据留着,那样就算网络不给力,用起来还是爽歪歪!

    sever Sent Event实例1
    

sever Sent Event实例1

var result = document.getElementById('result'); if (typeof (EventSource) !== 'undefined') { //创建事件源 var source = new EventSource('test.php'); //监听事件源发送过来的数据 source.onmessage = function(event){ result.innerHTML +=event.data +'
'; } }else{ result.innerHTML += "您的浏览器不支持server sent Event"; }

总结与展望


老实说,SSE真挺牛的!特别适合给服务器单向发信息这种事儿。既简单又好用,所以很多实时应用都用上了它。而且,你知道吗?随着HTML5越来越火,SSE肯定会越来越吃香!

如今是个飞快的高科技年代,人们都想找更好、更快的解决方法。SSE是一种简单实用的工具,可以帮助我们应对各种实时数据推送的问题。你试过SSE了吗?觉得哪儿最适合用它?赶紧来评论区聊聊,别忘了给我点赞

HTML5 新技能 Server-SentEvents(SSE):高效数据推送的新选择

原文链接:https://www.icz.com/technicalinformation/web/2024/06/16635.html,转载请注明出处~~~
0

评论0

请先
注意:请收藏好网址www.icz.com,防止失联!站内免费资源持续上传中…!赞助我们
显示验证码
没有账号?注册  忘记密码?