首页 > 编程 > HTML > 正文

浅析HTML5的WebSocket与服务器推送事件

2020-03-24 18:22:23
字体:
来源:转载
供稿:网友
WebSocketsWeb Sockets 是用于 Web html' target='_blank'>应用程序的新一代双向通信技术,运行在单一套接字之上,它通过 JavaScript 接口暴漏在 HTML5 兼容浏览器中。一旦取得 Web 服务器上的 Web Socket 连接之后,就可以通过调用 send() 方法从浏览器发送数据到服务器上,通过 onmessage 事件处理程序从服务器接收数据到浏览器中。下面是创建一个新的 WebSocket 对象的 API。JavaScript Code复制内容到剪贴板
第一个参数 url 用于指定要连接的 URL。第二个属性 - 端口是可选的,如果提供,就会指定一个服务器必须支持连接成功的子协议。WebSocket 属性
下面是 WebSocket 对象的属性。假定我们已经创建了上述的 Socket 对象:


WebSocket 事件
下面是 WebSocket 对象相关的事件。假定我们已经创建了上述的 Socket 对象:


WebSocket 方法
下面是 WebSocket 对象相关的方法。假定我们已经创建了上述的 Socket 对象:

服务器推送事件
传统的 Web 应用程序生成发送到 Web 服务器端的事件。比如,点击一个链接会从服务器请求一个新页面。这种从 Web 浏览器到 Web 服务器的时间类型可以称作客服端事件。随着 HTML5 的出现,WHATWG Web Applications 1.0 引入了一个从 Web 服务器到 Web 浏览器的事件流,被称作服务器推送事件(SSE)。使用 SSE 可以不停的将 DOM 事件推送到用户的浏览器中。这个事件流方法会打开一个到服务器的持久连接,新消息可用时发送数据到客户端,从而不再需要持续的轮询。SSE Web 应用程序
要在 Web 应用程序中使用服务器推送事件,我们需要给文档添加一个 eventsource 元素。 eventsource 元素的 src 属性应该指向一个 URL,这个 URL 应该提供一个 HTTP 持久连接用于发送包含事件的数据流。这个 URL 将会指向一个持续发送事件数据的 PHP,PERL 或者任意 Python 脚本。下面是一个简单的期望获得服务器时间的 Web 应用程序示例。XML/HTML Code复制内容到剪贴板
scripttype= text/javascript /*Defineeventhandlinglogichere*/ /script /head body divid= sse eventsourcesrc= /cgi-bin/ticker.cgi / /div divid= ticker TIME /div /body /html
SSE 服务器端脚本
服务器端脚本应该发送 Content-type 头指定类型为 text/event-stream,如下所示:
复制代码代码如下:print "Content-Type: text/event-stream/n/n";
设置 Content-type 之后,服务器端脚本将发送一个后面紧跟事件名称的 Event: 标签。下面的示例将会发送一个以换行符结束的 Server-Time 作为事件名称。
复制代码代码如下:print "Event: server-time/n";
最后一步是使用 Data: 标签发送事件数据,紧随其后的是以换行符结束的整数字符串值,如下所示:
复制代码代码如下:$time = localtime();
print "Data: $time/n";
下面是用 perl 编写的完整 ticker.cgi:
复制代码代码如下:
#!/usr/bin/perl
print "Content-Type: text/event-stream/n/n";
while(true){
print "Event: server-time/n";
$time = localtime();
print "Data: $time/n";
sleep(5);
处理服务器推送事件
让我们修改一下我们的 Web 应用程序来处理服务器推送时间。下面是最终示例:XML/HTML Code复制内容到剪贴板
scripttype= text/javascript document.getElementsByTagName( eventsource )[0]. addEventListener( server-time ,eventHandler,false); functioneventHandler(event) { //Alerttimesentbytheserver document.querySelector('#ticker').innerHTML=event.data; } /script /head body divid= sse eventsourcesrc= /cgi-bin/ticker.cgi / /div divid= ticker name= ticker [TIME] /div /body /htmlhtml教程

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表