【socket.io研究】0.前提准备
WebSocket出现之前,web实时推送,一般采用轮询和Comet技术(可细分为长轮询机制和流技术两种),需要大量http请求,服务器受不了。HTML5定义了WebSocket协议,基于TCP协议,由通讯协议和编程API组成,在浏览器和服务器之间建立双向连接,以基于事件的方式,赋予浏览器实时通讯的能力。
建立WebSocket连接的过程是浏览器首先发起一个http请求,在请求头中附带着“Upgrade: WebSocket”头信息,表名申请协议升级,服务器解析后产生应答信息,服务器与客户端的WebSocket连接就建立起来了,可以持续通信。这当然需要支持WebSocket浏览器的支持,不支持的用Comet接收发送信息来实现兼容。后面会简单介绍一下Comet。
Express:基于Node.js平台,快速,开放,极简的web开发框架,在socket.io中使用到了Express,所以需要安装。
1.它提供了一系列强大的特性,可以帮助构建各种web及移动设备的应用。
2.丰富的http快捷方式的任意组合和任意排列组合的connect中间件。
3.不对Node.js已有的特性进行二次抽象,只是在它基础上扩展web应用所需要的基本功能,不会影响性能。
namespace:命名空间,相当于命名域,在一定的范围内,命名有效。在socket.io中用namespace实现隔离机制,在不同namespace下的客户端消息具有不可见性。
环境搭建:
1.首先安装node.js,笔者使用的是window环境,直接下载双击安装,然后需要设置环境变量,可以引用其他的方法设置,都是可以的,我个人这样设置的
NODE_PATH=D:\_soft\nodejs\node_modules
PATH中添加:;D:\_soft\nodejs\;$HOME/node/bin
2.安装Express,保存,不是临时安装,临时安装省略掉 —save
npm install express – save
3.安装socket.io
npm install socket.io
4.环境搭建完成了
附录:
Comet:
1.AJAX长轮询方式:JavaScript调用XMLHttpRequest发出HTTP请求,返回值用来更改界面的显示。(服务器会阻塞请求知道有数据时才会返回或超时才返回。客户端在处理完返回数据后,会再次发送消息重新建立连接。客户端去数据是把当前服务器所有累计的变化的信息一次取回)
2.基于iframe及htmlfile的流方式:html中包含iframe,在html界面中嵌入隐藏帧,将这个隐藏帧的SRC属性设置为对一个长连接的请求,服务器就能源源不断地往客户端输入数据。
链接:
中文一个还不错的Express学习网站:http://www.expressjs.com.cn/