WebSocket(3)-- WebSocket协议简介[转载自http://blog.csdn.net/yl02520/article/]
2015-03-31 13:16
260 查看
2012-02-27 15:30 12823人阅读 评论(2) 收藏 举报
websocket服务器protocolstcpsocket
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支持的版本号,协议的字版本号,原始地址,主机地址等等一些列字段给服务器端。
例如:
[html] view
plaincopy
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协议传输。
[html] view
plaincopy
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服务器protocolstcpsocket
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支持的版本号,协议的字版本号,原始地址,主机地址等等一些列字段给服务器端。
例如:
[html] view
plaincopy
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协议传输。
[html] view
plaincopy
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消息,并且能知道连接失败的原因。
相关文章推荐
- .net生成静态页面(转载死亡调零http://blog.csdn.net/zdyguilong)
- C++ 虚函数表解析 (转载自陈皓专栏 http://blog.csdn.net/haoel)
- 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jinjazz/archive/2009/04/29/4138000.aspx
- 转载http://blog.csdn.net/yxnk:模拟大数乘法,将结果的每5位存在数组a[]中,以提高运算速
- 直接调用类成员函数地址(转载自http://blog.csdn.net/shamozhihuzhubohu/archive/2010/07/30/5776979.aspx)
- 转载两篇文章之二(从程序员到CTO所要培养的六种能力)作者:阿蒙 原文:http://blog.csdn.net/harrymeng/archive/2007/02/07/1503931.aspx
- GDI中的坐标映射问题 (转载自http://blog.csdn.net/huawdai/archive/2002/01/15/6169.aspx)
- Sql Server 生成连续日期的方法总结 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/GRANDTREE/archive/2009/06/16/4273129.aspx
- setprecision()与setiosflags() (转载http://blog.csdn.net/yunhaiC/archive/2008/03/11/2167462.aspx)
- 命令行下管理本机或远程主机服务的工具 - SC命令简介(转http://blog.csdn.net/happywqw/archive/2005/10/26/517156.aspx)
- 关于三种主流WEB架构的思考 (转载来源:http://blog.csdn.net/haohappy2004)
- Ext2.0框架的Grid使用介绍--转载http://blog.csdn.net/chiangbt/archive/2008/01/24/2064117.aspx
- NET应用程序中异步调用Web Service的几种方法 作者:veryhappy(wx.net),http://blog.csdn.net/veryhappy,转载请注明
- 预防SQL注入攻击之我见[转载http://blog.csdn.net/jyk/archive/2009/11/26/4882097.aspx]
- 身份认证系统 JOSSO Single Sign-On 1.2 简介 (http://blog.csdn.net/accesine960)
- 转载两篇文章之一(35 岁前程序员要规划好的四件事)原文:http://blog.csdn.net/oiio/archive/2007/02/12/1508001.aspx
- 学习UpdatePanel控件-看原文有图,本文只为个人备忘(转载:http://blog.csdn.net/ILOVEMSDN/archive/2007/11/11/1879343.aspx)
- WSDL: 描述你的Web服务(转载http://blog.csdn.net/flyingBox/archive/2006/01/01/568162.aspx)
- group、grouping、rollup、cube的用法和区别(本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/junmail/archive/2006/12/26/1463132.aspx)
- form数据传递 转载http://blog.csdn.net/lxxlql/archive/2009/08/04/4408158.aspx