WebSocket
WebSocket
HTML5的一个突破是它为新一代的网页编程提供了很多方便的API,使编程人员很容易的就可以做到很多样化的网页应用程序,而WebSocket API 就是其中一个。
WP:LS
什么是 Websocket API?
WebSocket protocol 是HTML5一种新的协议(protocol)。它是实现了浏览器与伺服器全双工通信(full-duplex)。
先在,很多网站为了实现即时通讯(real-time),所用的技术都是轮询(polling)。轮询是在特定的的时间间隔(time interval)(如每1秒),由浏览器对伺服器发出HTTP request,然后由伺服器返回最新的数据给客服端的浏览器。这种传统的HTTP request d的模式带来很明显的缺点 – 浏览器需要不断的向伺服器发出请求(request),然而HTTP request 的header是非常长的,里面包含的数据可能只是一个很小的值,这样会占用很多的带宽。
而最比较新的技术去做轮询的效果是Comet – 用了AJAX。但这种技术虽然可达到全双工通信,但依然需要发出请求(reuqest)。
在 WebSocket API,浏览器和伺服器只需要要做一个握手的动作,然后,浏览器和伺服器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。在此WebSocket 协议中,为我们实现即使服务带来了两大好处:
1. Header
互相沟通的Header是很小的-大概只有 2 Bytes
2. Server Push
伺服器可以主动传送数据给客户端
握手协议
在实现websocket连线过程中,需要透过浏览器发出websocket连线请求,然后伺服器发出回应,这个过程通常称为“握手” (handshaking)。
浏览器请求(request from browser) 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 ^n:ds[4U 伺服器回应(server response) HTTP/1.1 101 WebSocket Protocol Handshake Upgrade: WebSocket Connection: Upgrade Sec-WebSocket-Origin: http://example.com Sec-WebSocket-Location: ws://example.com/demo Sec-WebSocket-Protocol: sample 8jKS’y:G*Co,Wxa-
原理
在请求中的Sec-WebSocket-Key1, Sec-WebSocket-Key2 和最后的数字(^n:ds[4U)都是随机的,伺服器方面会用这些数据来构造出一个16Byte的回应。
把第一个Key的数字除以第一个KEY的空白间的数量,而第二个KEY也是如此。然后把这两个数字和最后的数字连接起来成为1个字串,而这个字串连接起来成为1个字串,而这个字串是MD5的和。
浏览器
实现websocket的协议,浏览器扮演者一个很重要的角色。互联网巨擎-谷歌公司(google)一直都是不断推动互联网的发展,不断推出为互联网带来新的冲击。不错,他也是不断推动HTML5发展的主力。永远走在互联网最前线的谷歌在它的CHROME浏览器支持了websocket。(CRHOME 5 之后的版本都支持websocket,但因为websocket还未最终版本,草拟不断更新,所以不同的版本会支持不同的draft)
此外,苹果当然也不断推动HTML5的发展,Safari浏览器也支持websocket了。然而,Mozilla的Firefox会在Firefox 4版本支持websocket。(Firefox 4 正式版预计会在2011年初面世)。至于Opera 方面,它在10.7的版本中也支持了websocket。
伺服器
在伺服器方面,网上都有不同对websocket支持的伺服器:
1. php – http://code.google.com/p/phpwebsocket/
2. jetty – http://jetty.codehaus.org/jetty/ (版本7才开始支持websocket)
3. netty – http://www.jboss.org/netty
4. ruby - http://github.com/gimite/web-socket-ruby
5. Kaazing - http://www.kaazing.org/confluence/display/KAAZING/Home