初识html5 WebSocket

1.  WebSocket概念

WebSocket是HTML5开始提供的一种Client与Server间进行全双工(full-duplex)通讯的网络技术

双工(duplex),指二台通讯设备之间,允许有双向的资料传输

Client和Server通过WebSocket Protocol建立连接后,双方可以互传数据并且双方都可以关闭此连接

2. HTTP概念

HTTP Protocol是无状态协议的,Client和Server通过HTTP Protocol建立连接后,将采用”request—response”模式通信

2.1 Client发起请求

2.2 Server接收请求

2.3 经过三次握手,建立连接

2.4 Server处理请求

2.5 Server将结果发给Client

2.6 断开连接

3. 既然使用HTTP时,Server不会主动向Client发送消息,那么Client如何获取Server的最新消息呢(刷新浏览器除外)?

常用的方法有:AJAX轮询、AJAX长轮询、HTML5 Server Sent Events (SSE) / EventSource

(下面的图片源自此文:http://stackoverflow.com/questions/11077857/what-are-long-polling-websockets-server-sent-events-sse-and-comet?lq=1)

3.1 AJAX轮询

function doAjaxPolling(){

   $.ajax({
     url: "http://xxx",
     timeout: 1000*60,
     success: function(data){
       //data就是从Server获取的消息
     },
     complete: function(){
         setTimeout(doAjaxPolling(),10*1000);
     },
     error: function(){
			setTimeout(doAjaxPolling(),10*1000);
     }
   });
 }

Client每隔一段时间(如:10s)向Server发送一次请求

3.2 AJAX长轮询

function doAjaxLongPolling(){

   $.ajax({
     url: "http://xxx",
     timeout: 1000*60,
     success: function(data){
       //data就是从Server获取的消息
     },
     complete: function(){
        doAjaxLongPolling();
     },
     error: function(){
		   doAjaxLongPolling();
     }
   });
 }

Client向Server发送一次请求,这时Server并未及时处理该请求,而是等到Server端产生新消息才处理该请求,然后将结果发给Client,Client收到消息后,会重新向Server发送一次请求

如果在规定时间内,Server仍未返回消息,Client会断开此次连接,然后重新向Server发送一次请求

3.3 HTML5 Server Sent Events (SSE) / EventSource

var source = new EventSource("http://xxx");
source.onmessage = function(event) {
  //event.data就是从Server获取的消息
};

Server Sent Events跟AJAX轮询类似,只不过轮询时间为3s

4. 使用WebSocket获取Server新消息

使用HTTP时,消息总是单项传输,而使用WebSocket时,Client和Server建立连接后,可以双向传输消息,当Server有新消息时,可以直接发给Client

5. WebSocket与HTTP keep-alive

HTTP keep-alive(HTTP 持久连接)是使用同一个TCP连接来发送和接收多个HTTP request/response,而不是为每一个新的request/response打开新的连接的方法

在 HTTP 1.1 中,所有的连接默认都是持续连接,除非特殊声明不支持

Chrome的keep-alive值为300s

Tomcat可在server.xml的Conenctor标签中设置keepAliveTimeout属性。默认情况下,keepAliveTimeout=connectionTimeout,即20s。keepAliveTimeout设置为-1,则连接永久有效

HTTP keep-alive,虽然也保存了连接,但仍是request—response模式,Server不能主动向Client发送消息

6. WebSocket的demo

打开http://www.websocket.org/echo.html,可看到当前浏览器是否支持WebSocket。如果支持,点击”Connect”,连接成功后,点”Send”即可发送消息

该页面下方,有个创建WebSocket的例子

7. WebSocket API

http://dev.w3.org/html5/websockets/

总结下WebSocket的特点:

Client和Server之间的连接可以一直使用,直到某一方关闭连接;避免了频繁建立、断开连接所产生的CPU、内存开销;Client和Server之间可以双向传输消息

参考文章:

http://www.websocket.org/

http://zh.wikipedia.org/wiki/WebSocket

http://zh.wikipedia.org/wiki/%E5%85%A8%E9%9B%99%E5%B7%A5

http://zh.wikipedia.org/wiki/HTTP%E6%8C%81%E4%B9%85%E8%BF%9E%E6%8E%A5

http://gabenell.blogspot.hk/2010/11/connection-keep-alive-timeouts-for.html

http://stackoverflow.com/questions/7620620/whats-the-behavioral-difference-between-http-stay-alive-and-websockets

http://stackoverflow.com/questions/17608551/how-is-websocket-different-than-http-with-header-connection-keep-alive-million

http://stackoverflow.com/questions/10028770/html5-websocket-vs-long-polling-vs-ajax-vs-webrtc

http://stackoverflow.com/questions/11077857/what-are-long-polling-websockets-server-sent-events-sse-and-comet?lq=1

初识html5 WebSocket,布布扣,bubuko.com

时间: 2024-12-22 23:41:54

初识html5 WebSocket的相关文章

使用 HTML5 WebSocket 构建实时 Web 应用

作为下一代的 Web 标准,HTML5 拥有许多引人注目的新特性,如 Canvas.本地存储.多媒体编程接口.WebSocket 等等.这其中有"Web 的 TCP "之称的 WebSocket 格外吸引开发人员的注意.WebSocket 的出现使得浏览器提供对 Socket 的支持成为可能,从而在浏览器和服务器之间提供了一个基于 TCP 连接的双向通道.Web 开发人员可以非常方便地使用 WebSocket 构建实时 web 应用,开发人员的手中从此又多了一柄神兵利器.本文首先介绍

【HTML5 WebSocket】WebSocket对象特性和方法

<HTML5 WebSocket权威指南>学习笔记&3 WebSocket方法的对象特性 1. WebSocket方法 a. send方法 send方法用于在WebSocket连接建立后,客户端向服务端发送消息.可分为发送两种消息,一种是普通文本信息,一种是二进制数据.需注意的是,send方法必须在连接建立以后才能使用,也就是在onopen里使用才不会出错. 发送普通消息 这个比较简单,在上一篇学习WebSocket事件时就用到了,只需要send(message)即可. 发送二进制数据

浅谈HTML5 WebSocket的机制

回顾上一章 在上一章<为什么我们需要HTML5 WebSocket>中,我简单的介绍了下WebSocket的前世今生.相信大家已对WebSocket有了初步的了解.那么今天我们继续深入学习WebSocket的机制. WebSocket机制 我们知道WebSocket是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(不知道的可以看下全双工通信RS-422标准),能更好的节省服务器资源和带宽并达到实时通讯,它建立在TCP之上,同HTTP一样通过TCP来传输数据,但是它和HTTP最大不同是

html5 websocket + node.js 实现网页聊天室

1 client:    socket.io server:   node.js +  express  + socket.io 一个简单的聊天室  demo,没有注册,内置了一些测试用户 2 client 关键代码 var socket = io.connect('http://localhost:8080'); socket.on('connect',function(){ console.log('connected to server'); socket.on('login succes

初识 HTML5

初识 HTML5(一) H5其实就是H4的一个增强版本,我们在利用H5进行网页的构造会更简便,标签语义更简洁明了.首先,我们要理解HTML4,它是HTML的标记+css2+JavaScript的一些基本应用,简言之,就是API+语法:而H5无非就是在原先的基础上面提供了一些新的功能. 1.H5的语义标签 1):html 的定义 ,它的一个文档声明 <!DOCTYPE html>  语法跟html4 差不多,w3c 提供了一个网站可以用来检测html 的语法.  https://validato

打通B/S与C/S !让HTML5 WebSocket与.NET Socket公用同一个服务端!

随着HTML5 WebSocket技术的日益成熟与普及,我们可以借助WebSocket来更加方便地打通BS与CS -- 因为B/S中的WebSocket可以直接连接到C/S的服务端,并进行双向通信.如下图所示: 一.对Socket Server的要求 我们可以尝试让Socket Server透明地支持WebSocket客户端,所谓透明的意思是,服务端开发人员不用关心客户端究竟是什么类型,而是可以统一的接收数据.处理数据.发送数据.为了做到这一点,我们可以构建一个服务端框架,让框架完成透明化的工作

H TML5 之 (1) 初识HTML5

新特性 HTML5 中的一些有趣的新特性: 用于绘画的 canvas 元素 用于媒介回放的 video 和 audio 元素 对本地离线存储的更好的支持 新的特殊内容元素,比如 article.footer.header.nav.section 新的表单控件,比如 calendar.date.time.email.url.search 浏览器的支持 最新版本的 Safari.Chrome.Firefox 以及 Opera 支持某些 HTML5 特性.Internet Explorer 9 将支持

Demo源码放送:打通B/S与C/S !让HTML5 WebSocket与.NET Socket公用同一个服务端!

随着HTML5 WebSocket技术的日益成熟与普及,我们可以借助WebSocket来更加方便地打通BS与CS -- 因为B/S中的WebSocket可以直接连接到C/S的服务端,并进行双向通信.如下图所示: 一.对Socket Server的要求 我们可以尝试让Socket Server透明地支持WebSocket客户端,所谓透明的意思是,服务端开发人员不用关心客户端究竟是什么类型,而是可以统一的接收数据.处理数据.发送数据.为了做到这一点,我们可以构建一个服务端框架,让框架完成透明化的工作

基于构建实时WEb应用的HTML5 WebSocket协议&lt;一&gt;

前言 作为下一代的 Web 标准,HTML5 拥有许多引人注目的新特性,如 Canvas.本地存储.多媒体编程接口.WebSocket 等等.这其中有"Web 的 TCP "之称的 WebSocket格外吸引开发人员的注意.WebSocket 的出现使得浏览器提供对 Socket 的支持成为可能,从而在浏览器和服务器之间提供了一个基于 TCP 连接的双向通道.WebSocket是html5新增加的一种通信协议,目前流行的浏览器都支持这个协议,Web 开发人员可以非常方便地使用 WebS