请选择 进入手机版 | 继续访问电脑版

HTML5星空

HTML5星空 首页 HTML5教程 WebSocket 查看内容

WebSocket 通信模式解析

2013-12-20 22:12| 发布者: mydream| 查看: 1719| 评论: 0

摘要: 传统的HTTP都是基于请求响应模型的,客户端和服务器端无法实现实时通信。之前也有模仿实时通信的技术,但从轮询、长轮询到Comet都不能彻底解决实时通信的问题。WebSocket的出现改变了这一状况,大幅度减少通信中无用 ...
传统的HTTP都是基于请求响应模型的,客户端和服务器端无法实现实时通信。之前也有模仿实时通信的技术,但从轮询、长轮询到Comet都不能彻底解决实时通信的问题。WebSocket的出现改变了这一状况,大幅度减少通信中无用的消息首部极大地提高了通信效率,同时也提供了非常低的延时。

注意 WebSocket不是没有延时,只是比较稳定,延时较短。在实际的工程运用中,WebSocket的延时是随机的,视网络情况而定。)

下面给出WebSocket请求和响应的消息首部。客户端到服务端的请求代码如下:
From client to server:
GET /demo HTTP/1.1
Host: example.com
Connection: Upgrade
Sec-WebSocket-Key2: 12998 5 Y3 1 .P00
Sec-WebSocket-Protocol: sample
Upgrade: WebSocket
Sec-WebSocket-Key1: 4@1 46546xW%0l 1 5
Origin: HTTP://example.com
[8-byte security key]

服务端到客户端的响应代码如下:
From server to client:
HTTP/1.1 101 WebSocket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
WebSocket-Origin: HTTP://example.com
WebSocket-Location: ws://example.com/demo
WebSocket-Protocol: sample
[16-byte hash response]

构造了WebSocket的消息首部后,客户端必须按照如下7个步骤产生通信。

(1) 解析WebSocket的URL地址,获取主机、端口、资源名称、安全模式。(如果连接不成功,则返回一个SYNTAX_ERR异常并中止执行。)
(2) 检查端口是否被占用。(如果发起的端口已经被占用,则抛出一个SECURITY_ERR异常并中止执行。一般情况下,80和443端口不会被封锁。)
(3) 若协议不被浏览器支持,则协议会被设为一个空数组。
(4) 如果在通信过程中,有任何内容字符的Unicode码值小于U+0021或大于 U+007E(换言之,有空格字符或任意不能显示的ASCII码),都将报错          SYNTAX_ERR异常,同时断开通信步骤。
(5) WebSocket构造器脚本先使源变成序列化的ASCII码,然后再转换成ASCII码的下标格式。
(6) 返回一个新的WebSocket对象,并在后台继续这些动作(不锁死脚本)。
(7) 建立一个到指定主机端口的WebSocket连接,该连接从源发起一个带着安全认证、源主机名称、协议列表(可能为空)和遵守cookie旗标设置的连接请求。



鲜花

握手

雷人

路过

鸡蛋

相关阅读

更多资源及Java+大数据个人原创视频,
可关注本站官方公众号观看:
快讯

     京ICP备14042305号-1

html5star team © 2012-2013 html5星空 Comsenz Inc.

GMT+8, 2021-11-29 13:32 , Processed in 0.061950 second(s), 29 queries .

返回顶部