资讯专栏INFORMATION COLUMN

Python:Tornado 第三章:HTML5 WebSocket概念及应用:第一节:WebSoc

mo0n1andin / 1362人阅读

摘要:上一篇文章第二章实战演练开发网站第九节防止跨站攻击下一篇文章第三章概念及应用第二节服务端编程的异步特性使得其非常适合服务器的高并发处理,客户端与服务器的持久连接应用框架就是高并发的典型应用。因为是的标准协议,所以不受企业防火墙的拦截。

上一篇文章:Python:Tornado 第二章:实战演练:开发Tornado网站:第九节:防止跨站攻击
下一篇文章:Python:Tornado 第三章:HTML5 WebSocket概念及应用:第二节:服务端编程

Tornado的异步特性使得其非常适合服务器的高并发处理,客户端与服务器的持久连接应用框架就是高并发的典型应用。而WebSocket正是在HTTP客户端与服务器之间建立持久连接的HTML5标准技术。本章将讲解WebSocket技术在Tornado框架中的应用。
WebSocket protocol是HTML5定义的一种新的标准协议(RFC6455),它实现了浏览器与服务器的双全工通信(full-duplex)。

1、WebSocket的应用场景

传统的HTTP和HTML技术使用客户端主动向服务器发送请求并获取回复。但是随着即时通讯需求的增多,这样的通信模式有时并不能满足应用的需求。

WebSocket与普通的Socket通讯类似,它打破了原来HTTP的Request和Response一对一的通信模型,同时打破了服务器只能被动地接受客户端请求的应用场景。也许读者听说过Ajax、Long poll等基于传统HTTP的动态客户端技术,但这些技术无不采用轮询技术,耗费了大量的网络带宽和计算资源。

而WebSocket正是为了应对这样的场景而制定的HTML5标准,相对于普通的Socket通信,WebSocket又在应用层定义了基本的交互流程,使得Tornado这样的服务器框架和JavaScript客户端可以构建出标准的WebSocket模块。

总结WebSocket的特点如下:

WebSocket适合服务端主动推送的场景。

相对于Ajax和Long poll等技术,WebSocket通信模型更高效。

WebSocket仍然与HTTP完成Internet通信。

因为是HTML5的标准协议,所以不受企业防火墙的拦截。

2、WebSocket的通信原理

WebSocket的通信原理是在客户端与服务器之间建立TCP持久链接,从而使得当服务器有消息需要推送给客户端时能够进行即时通信。

虽然WebSocket不是HTTP,但由于在Internet上HTML本事是由HTTP封装并进行传输的,所以WebSocket仍然需要与HTTP进行协作。IETF在RFC6455中定义了基于HTTP链路建立WebSocket信道的标准流程。

客户端通过发送如下HTTP Request告诉服务器需要建立一个WebSocket长链接信道:

GET /stock_info/?encoding=text HTTP/1.1
Host:echo.websocket.org
Origin:http://websocket.org
Cookie:__token=ubcxx13
Connection:Upgrade
Sec-WebSocket-Key:uRovscZjNol/umbTt5uKmw==
Upgrade:websocket
Sec-WebSocket-Version:13

读者可以发现其仍然是一个HTTP Request包,并对其中的内容非常熟悉。

HTTP请求方式:GET

请求地址:/stock_info

HTTP版本号:1.1

服务器主机域名:echo.websocket.org

Cookie信息:__token=ubcxx13

但是在HTTP Header中出现了4个特色的字段,他们是:

Connection:Upgrade
Sec-WebSocket-Key:uRovscZjNol/umbTt5uKmw==
Upgrade:websocket
Sec-WebSocket-Version:13

这就是WebSocket建立链路的核心,它告诉Web服务器:客户端希望建立一个WebSocket链接,客户端使用的WebSocket版本时13,密钥是uRovscZjNol/umbTt5uKmw==。

服务器在收到该Request后,如果同意建立WebSocket链接则返回类似如下的Response:

HTTP/1.1 101 WebSocket Protocol Handshake
Date:Fri,10 Feb 2012 17:38:18 GMT
Connection:Upgrade
Server:Kaazing Gateway
Upgrade:WebSocket
Access-Control-Allow-Origin:http://websocket.org
Access-Contril-Allow-Credentials:true
Sec-WebSocket-Accept:rLHCKw/SKs09GAH/ZSFhBATDKrU=
Access-Control-Allow-Headers:content-type

这依旧是一个标准的HTTP Response,其中与WebSocket相关的Header信息是:

Connection:Upgrade
Upgrade:WebSocket
Sec-WebSocket-Accept:rLHCKw/SKs09GAH/ZSFhBATDKrU=

前面的两条数据告诉客户端:服务器已经将本连接转换为WebSocket链接。而Sec-WebSocket-Accept是将客服端发送的Sec-WebSocket-Key加密后产生的数据,以让客服端确认服务器能够正常工作。

至此,在客户端与服务器之间已经建立了一个TCP持久链接,双发已经可以随时向对方发送消息。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/44772.html

相关文章

  • PythonTornado 三章HTML5 WebSocket念及应用第三节:客户端编程

    摘要:上一篇文章第三章概念及应用第二节服务端编程下一篇文章第四章网站部署第一节调试模式由于是的标准之一,所以主流浏览器的客户端编程语音已经支持的客户端编程。此事件发生在收到了来自服务器的消息时。此事件发生在通信过程中有任何错误时。 上一篇文章:Python:Tornado 第三章:HTML5 WebSocket概念及应用:第二节:服务端编程下一篇文章:Python:Tornado 第四章:T...

    miguel.jiang 评论0 收藏0
  • PythonTornado 三章HTML5 WebSocket念及应用:第二节:服务端编程

    摘要:上一篇文章第三章概念及应用第一节概念下一篇文章第三章概念及应用第三节客户端编程定义了类用于处理链接的请求,应用开发者应该继承该类并实现其中的函数。通常,这是服务器端编程的核心函数,通过解析收到的消息做出相应的处理。 上一篇文章:Python:Tornado 第三章:HTML5 WebSocket概念及应用:第一节:WebSocket概念下一篇文章: Python:Tornado 第三章...

    xfee 评论0 收藏0
  • PythonTornado 第四章:Tornado网站部署:一节:调试模式

    摘要:上一篇文章第三章概念及应用第三节客户端编程下一篇文章第四章网站部署第二节静态文件之前着重讲解的编程知识点,所有之前的例子都使用最简单的启动方式运行。 上一篇文章:Python:Tornado 第三章:HTML5 WebSocket概念及应用:第三节:客户端编程下一篇文章:Python:Tornado 第四章:Tornado网站部署:第二节:静态文件 之前着重讲解Tornado的编程知...

    desdik 评论0 收藏0
  • PythonTornado 第二章:实战演练:开发Tornado网站:第九节:防止跨站攻击

    摘要:上一篇文章第二章实战演练开发网站第八节用户身份认证下一篇文章第三章概念及应用第一节概念跨站请求伪造,或是一种对网站的恶意利用。其中是存在漏洞的网站,而是存在攻击行为的恶意网站。 上一篇文章:Python:Tornado 第二章:实战演练:开发Tornado网站:第八节:用户身份认证下一篇文章:Python:Tornado 第三章:HTML5 WebSocket概念及应用:第一节:Web...

    Zoom 评论0 收藏0
  • PythonTornado 开篇

    摘要:作为网站的基础框架,于年月日发布,目前已经获得了很多社区的支持,并且在一系列不同的场景种得到应用。使用该框架,开发者能够快速开发出即安全又强大的用户身份认证机制,例如机制用户身份认证防止跨站攻击等等。 下一篇文章:Python:Tornado 第一章:异步及协程基础:第一节:同步与异步I/O Tornado是一个可扩展的非阻塞Web服务器以及相关工具的总称。Tornado每秒可以处理...

    Anshiii 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<