一起来用Websocket(一)开篇 Websocket!Socket在HTML5复活
一起来用Websocket(一)开篇 Websocket!Socket在HTML5复活
前言
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框架)
http://jwebsocket.org/
[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中应用高性能通信引擎
转载于:https://www.cnblogs.com/dtdnh520/archive/2010/11/09/1873095.html
一起来用Websocket(一)开篇 Websocket!Socket在HTML5复活相关推荐
- 突袭HTML5之WebSocket入门3 - 通信模型socket.io
为什么需要socket.io? node.js提供了高效的服务端运行环境,但是由于浏览器端对HTML5的支持不一,为了兼容所有浏览器,提供卓越的实时的用户体验,并且为程序员提供客户端与服务端一致的编程 ...
- java nio socket长连接_netty学习实战—实现websocket长连接和socket之间进程通信
netty学习-实现websocket长连接和socket之间通信 最近正在学习netty,跟着教程写了一个基于WebSocket的网页聊天室,对netty有了一定的了解,现在正好项目使用到长连接,选 ...
- websocket之一:websocket简介
Websocket websocket为一次HTTP握手后,后续通讯为tcp协议的通讯方式. WebSocket 使用一种被称作"Upgrade handshake(升级握手)"的 ...
- php通知websocket,php实现websocket实时消息推送
php实现websocket实时消息推送,供大家参考,具体内容如下 SocketService.php /** * Created by xwx * Date: 2017/10/18 * Time: ...
- android websocket封装,Android WebSocket 方案选型OkHttp
目前Android WebSocket 框架 主要包括: SocketIO Java-WebSocket OkHttp WebSocket 一开始我首选的是采用SocketIO方案,因为考虑该方案封装 ...
- java websocket原理_Java WebSocket基本原理
WebSocket协议介绍 WebSocket协议是一个网络协议,允许两个相连的端在一个单一TCP连接上进行全双工消息通信. 在WebSocket的场景中,连接通过HTTP和WebSocket端点交互 ...
- apache 配置 wss websocket打开握手超时_「Web应用架构」WebSocket介绍和WebSocket API
WebSocket支持在客户端和服务器之间双向的.面向消息的文本和二进制数据流.它是浏览器中最接近原始网络套接字的API.除了WebSocket连接也不仅仅是一个网络套接字,因为浏览器在一个简单的AP ...
- WebSocket使用javax.websocket.RemoteEndpoint.Basic.sendObject(Object arg0)向页面方法发送对象
WebSocket接口中有一个直接发送对象给页面的方法: voidjavax.websocket.RemoteEndpoint.Basic.sendObject(Object arg0) throws ...
- webSocket整理(二)--webSocket的模拟qq聊天案例
一 前言 前面一篇大致讲解了webSocket的定义以及配置,那么这一篇通过简单案例对webSocket更好的理解与使用.使用的是spring-servlet-webSocket的整合形式.因为这里主 ...
最新文章
- Mongodb 请求处理流程
- .Net(C#)自定义WinForm控件之小结篇(强力推荐)
- 利用CentOS快速构建自己的发行版(3)
- gettype获取类名_delphi – 获取属于任何类型的单元名称(TRttiType)
- 【初学线段树,看这篇文章准没错】线段树(单点修改and区间修改)acm寒假集训日记22/1/10
- vue打包后图片未显示问题
- VS 2015 搭建Google Test
- SubSonic使用技巧
- 服务器系统建立安全连接失败,尝试与系统“ServerName”建立安全连接时,MSDTC遇到错误(HR = 0x80000171)...
- AODV的设计思路和现有的各种解决方案的优缺点
- 我的注电之旅——基础考试篇
- scratch 游戏html5,scratch3转换为html5
- 数据分析案例-电影数据可视化分析
- 解决VsCode感叹号快捷键生成html骨架失效
- 无法向虚拟机中拷贝文件解决办法
- MIT线性代数1806(35) 总复习
- 如何快速的开通公众号【原创】功能
- 英特尔第十代处理器为什么不支持win7_Intel的7代酷睿CPU可以安装Win7系统吗?能不能完美支持呢?为什么有人说不能使用Win7系统...
- Collecting Bugs (DP期望)
- 自学虚幻引擎图文笔记:颜色混合、法线强度调整及选择、归一化、点积、常量偏差比例、规范化等节点
热门文章
- ASP调用存储过程详解。
- apache 不解释php,apache-2.2 – Apache不解释.PHP文件
- matlab下的textread()
- uni-app接口封装
- 求最大连续子序列和——解法1 – 暴力出奇迹||解法2 – 分治
- JSP:1. 指令(page ;include ;taglib)2. 内置对象
- Windows 技术篇-任务管理器查看执行进程的程序所在位置方法,查看执行进程的命令行
- DbVisualizer数据库连接工具默认查询结果只显示100条解决方法,dbvis如何展示更多行,如何显示全部数据
- RT-Thread的I/O设备模块及其驱动实现步骤
- CTFshow 命令执行 web48