WebSocket协议

一.WebSocket概述
WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-duplex)。一开始的握手需要借助HTTP请求完成。 通俗来说,你可以用HTTP 协议 传输非Html 数据

客户端请求
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
Origin: 

服务器响应
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=
Sec-WebSocket-Protocol: chat

二.WebSocket和传统web即时通讯技术的区别
     很多网站实现即时通讯采用 ajax轮询long poll“伪”长连接, 服务器和客户端还要大量交换 HTTP header,信息交换效率很低
  • ajax轮询:浏览器每隔几秒就发送一次请求,询问是否有新消息,服务器返回结果;-- 需要服务器有很快的处理速度和资源。(速度)
  • long poll也是采用轮询的方式,浏览器建立连接后,如果没有新消息就不返回response给客户端,有新消息才返回,返回完之后再次建立连接,周而复始。-- 需要有很高的并发,也就是说同时接待客户的能力。(场地大小)
这两种方式都非常耗费资源,是在不断地建立HTTP连接,然后等待服务端处理,可以体现HTTP协议的一个特点:被动性 服务端不能主动联系客户端,只能有客户端发起
  • WebSocket通过http建立TCP连接之后,之后交换的数据就不需要HTTP request了,这使得其成为一个真正的长连接。 但是不需要发送 HTTP header就能交换数据显然和原有的 HTTP 协议是有区别的,所以它需要对服务器和客户端都进行升级才能实现。在此基础之上的WebSocket是一个双向通道,在同一个TCP连接之上既可以发也可以收信息
  • 为了兼容性 WebSocket 的握手是以 HTTP 的形式发起的,如果服务器或者代理不支持 WebSocket,它们会把这当做一个不认识的 HTTP 请求从而优雅地拒绝掉
三.支持WebSocket的主流浏览器( ie不支持
Chrome
Supported in version 4+
Firefox
Supported in version 4+
Internet Explorer
Supported in version 10+
Opera
Supported in version 10+
Safari
Supported in version 5+
四.支持webSocket协议的服务器
jetty 7.0.1 包含了一个初步的实现
resin 包含有websocket 实现
pywebsocket, apache http server 扩展
apache tomcat 7.0.27 版本
Nginx 1.3.13 版本
jWebSocket java实现版
五.DWR技术和WebSocket
  • DWR2.x的推技术也叫DWR Reverse Ajax(逆向ajax),用在服务器主动向浏览器主动推送数据,包括主动模式(polling和comet)和被动模式(piggyback)
  • piggyback为默认模式:  如果后台有什么内容需要推送到前台,是要等到那个页面进行下一次ajax请求的时候,将需要推送的内容附加在该次请求之后,传回到页面。 只有等到下次请求页面主动发起了,中间的变化内容才传递回页面
  • comet:   当服务端建立和浏览器的连接,将页面内容发送到浏览器之后,对应的连接并不关闭,只是暂时挂起。如果后面有什么新的内容需要推送到客户端的时候直接通过前面挂起的连接再次传送数据。  服务器所能提供的连接数目是一定的,在大量的挂起的连接没有关闭的情况下,可能造成新的连接请求不能接入,从而影响到服务质量。 
  • polling: 由浏览器定时向服务端发送ajax请求,询问后台是否有什么内容需要推送,有的话就会由服务端返回推送内容。这种方式和我们直接在页面通过定时器发送ajax请求,然后查询后台是否有变化内容的实现是类似的。只不过用了dwr之后这部分工作由框架帮我们完成了(类似ajax轮询

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值