HTML5中有一个比较好用的特性,就是Websocket。现在已集成在chrome的较新版本中。由于前段时间在项目中有用到Websocket,感到Websocket真是HTML5中比较强大的功能。现在抽点时间,总节一下在.net中使用Websocket 要注意的地方。同时,由于园子里关于Websocket的文章不多,希望能起到抛砖引玉的作用,希望能和大家一起讨论更好的实现方式,形成更好的应用。
如果可以的话,希望能形成我们.net社区自己的Websocket 框架(类似jWebsocket)。最近,业余时间我也时行了jWebsocket转.net版本的开发和测试工作,希望能借这个专题,把这个框架和大家一起完善起来,也希望有兴趣的朋友加入一同开发,相信我们能得很多。
下面言规正转,开始谈Websocket吧。
示例
下面有一个类似在线留言的例子:http://HTML5demos.com/web-socket。
大家一眼能看出来吧,这个没啥特别的呀,不是和AJAX差不多吧。我用JQuery或者Xmlhttprequest或其它js框架都可以很快写出来呀。其实,Websocket也可以被拿来当用AJAX框架来用,不过,这样太大材小用了。这个示例中有几个细节:
第一、 初始,连接未建立。
上图所示”Not connected”.表示,连接还未建立。
第二、 连接建立。
等一段时间后,原来灰色部分会变成绿色的“Socket Open”,表示连接已经建立了。
大家也可能注意到,我在文本框中输入了内容后,按回车后,在最下面的部份就出来了我发的内容。
第三、 Socket open 常连接。
我们发现,我们一段时间不退出,状态还是绿色的“Socket Open”。说明,连接还是一直存在的。其次,这里使用的是Socket,也就是说,刚才的留言板是在线的,实时的留言板,相当于一个聊天室,大家都可以看到你在线的状态。是不是很令人激动。没错,我们的socket又复活了,在后台,使用的就是socket的程序,其语言可以是Java、C#、PHP等其它可以监听或编写socket应用的语言。
好,上面的例子过后,我们来正式对比一下Websocket和HTTP的区别吧:
规定平台Websocket服务器和谷歌浏览器,或Websocket服务器与ws客户端程序之间数据传送的格式协议,软件设计应按照此协议进行。
HTTP的三个问题:
(1)为一个WEB客户端潜在的建产多个TCP连接。
(2)有一个大的HTTP头,以满足HTTP协议。
(3)客户端的脚本必须为输入连接和输出连接建立一个映射,以确定回复。
(4)基于请求-响应模式,HTTP服务端不能主动推送(push)数据到客户端。
Websocket的三个好处:
(1) 一个WEB客户端只有一个TCP连接。
(2) Websocket服务端可以推送数据到web客户端.
(3) 轻量级的头,减少数据传送量
(4) 服务端可以主动推送数据到客户端
(5) 已成功应用于游戏、股票交易等用多用户实时系统中。
(6) 支持多客户端,Web客戶
(7) 客户端开发接口简单
Websocket客户端开发接口
如下图所示:
提供下面三个接口
onopen: 当接口打开时
onmessage: 当收到信息时
onclose: 当接口关闭时
上面的几个方法已在chrome浏览器中得到支持,开发接口也相对简单。
本篇总结:
1. Websocket就是借着 HTML5在浏览器中加了一个socket通信程序的客户端。你在安装浏览器的时候,默认装了一个客户端,可以向服务端请求,并建产链接。然后再像原先的socket应用程序一样来回互相发送消息。
2. Websocket不是一个新技术,只是HTML5中用javascript提供了一些接口,让你调用。服务端还是任何一门支持Socket通信的语言就行。
3. Websocket的应用。可以应用在很的领域,游戏,股票。简单说主要是一些多用户的实时应用。也可实现类似和webqq一样的网页聊工具。
4. Websocket把http协议轻量化了,在web交互中,我们再也不用让http包了一层又一层,而了去满足我们不需要的功能了。我们只要简单传我们想要的数据,协议我们可以在Websocket这种轻量级协议下,制定我们自己的子协议,可以减少不少的交互和网络流量哦。
后面几篇会慢慢介绍,也欢迎大家一起讨论 ^-^。
引用:
[1] jWebsocket(java服务端和客户端websocket框架)
[2] Websocket协议(本协议应用较为多,也比较全了)http://tools.ietf.org/HTML/draft-hixie-theWebsocketprotocol-76
[3] HTML5 Websockets 基础使用教程
http://kb.cnblogs.com/page/72745/
大纲预告
一起来用Websocket(一):[开篇]Websocket!Socket在HTML5复活
一起来用Websocket(二):Websocket协议详细分析
一起来用Websocket(三):开源Websocket框架--jWebsocket简介
主要功能,在线示例
一起来用Websocket(四):开源Websocket框架jWebsocket的架构设计
一起来用Websocket(五):jWebsocket中的权限和配置
一起来用Websocket(六):jWebsocket框架中的数据包处理
一起来用Websocket(七):jWebsocket 框架中的过滤器
一起来用Websocket(八):jWebsocket框架中的常用工具类说明
一起来用Websocket(九):jWebsocket的.NET版本NWebsocket
一起来用Websocket(十):NWebsocket中的二次开发
服务端插件 客户端插件
一起来用Websocket(十一):NWebsocket框架开发实例
一起来用Websocket(十二):在NWebsocket中应用高性能通信引擎