WebSocket-01 概念以及相关

1 篇文章 0 订阅


写在前面

         本人是搞技术的,由衷的喜欢技术。其实我想大多数开发人员喜欢技术的并不多,多数为了工作而不得不学习新的技术。但是我是那种喜欢技术的,除了工作中会用的新计划我会去研究,业余时间我也喜欢研究和学习新的技术。当然,鄙人学习新的技术本质的目的不是在于跳槽,起初的目的就是为了好玩!

         有时想想,我在研究学习的时候,也许别人正在流连忘返与各种娱乐场所,当时我想说其实那只是他们的爱好,那么我的爱好就是写代码,其实也没所谓…道不同何必去管别人!

一种Html5的协议

WebScoket的字眼对于学过各种编程语言的开发者来说并不陌生,尤其“Socket”这个词,想到这个词,我们就会想到 UDP、TCP、Http等等各种传输协议。Http协议大家很是熟悉,所有的www的文件都必须遵守这个标准,协议协议顾名思义就是为了统一管理大家约定的一个传输方式。大家都知道以往的html标准都是基于http协议的,那么伴随着html5的建立,在html5标准中新来的一个新的字眼websokcet。Websocket跟http一样,都是基于tcp协议的一种扩展。从概念的角度来说,业务费就是满足现有web需求,建立的一种新的web传输方式。

传统即时通讯的做法

一个新的技术的出现和一种新的标准的建立,其实大致都是为了解决实际问题,提供了一项新的解决方案。Websocket也是如此,那么首先我们分析一下websocket的基于html5的问题而出现,它到底跟传统的http协议有哪些异同点呢?

         其实对比这两个问题,我们最好例句一个应用场景来描述这个问题,这样也比较切合实际,虚头巴脑的技术讲解其实是对技术的一种玷污。

         现在一家公司想做web应用《web内部及时通讯》,我们想到即时通讯技术,我们其实很快就会联想到QQ、微信等相关产品,但是但多数是基于PC端,基本是利用TCP、UDP协议去实现的。那么对于http协议而言的web程序一般公司却做的很少,不是因为不需要,而是这的确有些难度,当然像腾讯webqq版做的真是没话说。且不去研究腾讯是如何做的,我们先来看看传统做web及时通讯都有哪些方案。

1.      Ajax轮询

2.      长连接

3.      Comet

4.      Flash、applet

第一点说白了,就是启用js去启用一个定时任务,每隔一个定时时间就去请求一次服务器后台,读取最新的消息,然后客户端进行显示。其实这种方式目前依然还是被很多公司或者说是技术人员去使用,之所以没有思考升级他们的这种方案,是因为目前他们用这种方式还没有遇到问题,之所以没遇到问题,我的意思其实是说,他们的应用在线用户还很少,呵呵~~这样功能其实可以实现,但是这样的方式,客户端就会不停的打开和服务端的链接,在并发量很大的互联网应用中,这种做法是相当危险的,他基本上是集聚而且又是一种持续的加大着服务端的压力。

第二点:HTTP长连接这种把数据从服务器主动“推”到客户端的技术,能带来的好处不言而喻。它可以把最新的统计数据输出到客户端,也可以实现即时通讯。HTTP1.1支持持久连接。如果浏览器或者服务器在其头信息加入了这行代码Connection:keep-alive。TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了带宽。结合服务端的处理,再加上一定观察者模式或其它则可以再一定程度上去优化。

第三点:Comet基于 HTTP 长连接的“服务器推送”技术,对于具体的内容大家可以看这个网址http://www.ibm.com/developerworks/cn/web/wa-lo-comet/

第四点:Flash applet 以及很多插件的模式,其实就是在浏览器上跨越http协议,使用本地Socket 和服务端进行相关交互。这个模式的不好的一点就是浏览器需要装插件,这个时候也会就会存在浏览器差异等不稳定的情况。

总结:无论以上那种方式,可以大致分为两点:第一,用长连接的方式进行处理,比如技术Comet或者Comet后的pushlet 基本上都是利用长连接支持,来在服务端做优化以及处理。第二,在浏览器上做手脚,利用浏览器上的插件模式,进行建立夸http协议之外的sokcet通信。

Websocket原理

WebSocketprotocol 

现很多网站为了实现即时通讯,所用的技术都是轮询(polling)。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP request,然后由服务器返回最新的数据给客服端的浏览器。这种传统的HTTP request 的模式带来很明显的缺点 – 浏览器需要不断的向服务器发出请求,然而HTTP request header是非常长的,里面包含的有用数据可能只是一个很小的值,这样会占用很多的带宽。

而比较新的技术去做轮询的效果是Comet – 用了AJAX。但这种技术虽然可达到全双工通信,但依然需要发出请求。

 WebSocket API,浏览器和服务器只需要要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。在此WebSocket 协议中,为我们实现即时服务带来了两大好处:

1. Header

互相沟通的Header是很小的-大概只有 2 Bytes

2. Server Push

浏览器

服务器

在服务器端,也出现了一些实现websocket协议的项目:

jetty 7.0.1 包含了一个初步的实现

resin 包含有websocket 实现

pywebsocket,apache http server 扩展

apache tomcat7.0.27 版本

Nginx 1.3.13 版本

jWebSocket java实现版

websocket api在浏览器端的广泛实现似乎只是一个时间问题了值得注意的是服务器端没有标准的api, 各个实现都有自己的一套api, 并且jcp也没有类似的提案所以使用websocket开发服务器端有一定的风险.可能会被锁定在某个平台上或者将来被迫升级.

 

(个人微信号)   (技术公众号)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值