WebSocket(3)-- WebSocket协议简介
来源:互联网 发布:mysql 5.7 zip 下载 编辑:程序博客网 时间:2024/05/16 11:33
[本文属原创,如有转载,请注明出处http://blog.csdn.net/yl02520/article/]
WebSocket协议是一种双向通信协议,它建立在TCP之上,同http一样通过TCP来传输数据,但是它和http最大的不同有两点:1.WebSocket是一种双向通信协议,在建立连接后,WebSocket服务器和Browser/UA都能主动的向对方发送或接收数据,就像Socket一样,不同的是WebSocket是一种建立在Web基础上的一种简单模拟Socket的协议;2.WebSocket需要通过握手连接,类似于TCP它也需要客户端和服务器端进行握手连接,连接成功后才能相互通信。
下面是一个简单的建立握手的时序图:
这里简单说明一下WebSocket握手的过程。
当Web应用程序调用new WebSocket(url)接口时,Browser就开始了与地址为url的WebServer建立握手连接的过程。
1. Browser与WebSocket服务器通过TCP三次握手建立连接,如果这个建立连接失败,那么后面的过程就不会执行,Web应用程序将收到错误消息通知。
2. 在TCP建立连接成功后,Browser/UA通过http协议传送WebSocket支持的版本号,协议的字版本号,原始地址,主机地址等等一些列字段给服务器端。
例如:
- GET /chat HTTP/1.1
- Host: server.example.com
- Upgrade: websocket
- Connection: Upgrade
- Sec-WebSocket-Key:dGhlIHNhbXBsZSBub25jZQ==
- Origin: http://example.com
- Sec-WebSocket-Protocol: chat,superchat
- Sec-WebSocket-Version: 13
3. WebSocket服务器收到Browser/UA发送来的握手请求后,如果数据包数据和格式正确,客户端和服务器端的协议版本号匹配等等,就接受本次握手连接,并给出相应的数据回复,同样回复的数据包也是采用http协议传输。
- HTTP/1.1 101 Switching Protocols
- Upgrade: websocket
- Connection: Upgrade
- Sec-WebSocket-Accept:s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
- Sec-WebSocket-Protocol: chat
4. Browser收到服务器回复的数据包后,如果数据包内容、格式都没有问题的话,就表示本次连接成功,触发onopen消息,此时Web开发者就可以在此时通过send接口想服务器发送数据。否则,握手连接失败,Web应用程序会收到onerror消息,并且能知道连接失败的原因。
- WebSocket(3)-- WebSocket协议简介
- WebSocket(3)-- WebSocket协议简介
- WebSocket(3)-- WebSocket协议简介
- WebSocket(3)-- WebSocket协议简介
- WebSocket(3)-- WebSocket协议简介
- android WebSocket协议简介
- WebSocket协议简介
- WebSocket协议简介
- websocket协议简介
- WebSocket(3)-- WebSocket协议简介[转载自http://blog.csdn.net/yl02520/article/]
- websocket通讯协议(10版本)简介
- WebSocket(协议)
- ws(websocket)协议
- WebSocket(2)--为什么引入WebSocket协议
- WebSocket(2)--为什么引入WebSocket协议
- WebSocket(2)--为什么引入WebSocket协议
- WebSocket(2)--为什么引入WebSocket协议
- WebSocket(1)-- WebSocket API简介
- 317_延迟执行任务
- 《Java 源码分析》:Java NIO 之 Selector(第二部分selector.select())
- 虚函数的使用限制
- 关于浏览器UA的一些介绍
- 318_列表带链接启动网页
- WebSocket(3)-- WebSocket协议简介
- c++基础之引用
- 关于9patch的使用
- 319_volley的post请求
- SQL注入攻击入门篇
- 10.14
- Python入门教程六:两个随机数相加
- CentOS中sudo命令出错
- 320_get和post的区别