WebSocket和node.js

来源:互联网 发布:转门看lpl软件 编辑:程序博客网 时间:2024/05/28 15:06

       web技术这些日子的发展可谓是有变革性的发展,已不仅局限于web2.0的ajax异步刷新的层面了。个人认为HTML5后真正能够带来变革性意义的技术主要在于WebGL、本地操作的支持,然而web发展不仅仅存在与客户端,服务端技术也发生着变革,Websocket和node.js就是其中的代表,web服务的实时性和异步性带了的革命不亚于客户端的革命。

        一般的web模型都是基于get和post的,所有的动作的发起点只有web页面。

        如果需要服务器主动推送数据给客户端怎么办呢?有两种方法一种是客户端轮询,另一种是长连接。

       客户端轮询在ajax普遍使用之前都是频刷页面来实现,性能和用户体验自然差很多,好在ajax出现后js异步响应,但是客户端需要有专门的定时事件去抓取服务端数据,性能也不会很好。长连接方式需要服务端和客户端的协作了,客户端发起长连接,服务端也不能断开,保持一条通讯通道,但是由于这条通道的存在,请求也就不可能结束,页面一直处于请求状态而不能结束,所以为了不影响主页面的加载过程一般会添加一个隐藏的frame来保持连接,但是会受到跨域的限制。这却不能从根本上解决问题,websocket的技术应运而生,当然首先需要浏览器的支持。websocket是客户端和服务端异步通信的技术。他是建立在http协议之上的,在客户端编程你不需要做任何过多的操作只需要使用WebSocket对象就可以了。他包括三种事件:打开连接、消息到达、关闭连接,和一个动作:发送数据。如下:

var socket = new WebSocket("ws://localhost:80")//注意:websocket使用的是ws而不是httpsocket.onopen(event)socket.send()socket.onmessage()socket.onclose()

客户端编程很容易。服务端呢?

由于websocket协议规定了他需要有一个握手过程:

客户端:GET /call HTTP/1.1Upgrade: WebSocketConnection: UpgradeHost: localhost:8080Origin: http://localhostCookie: somenterCookie服务端:HTTP/1.1 101 Web Socket Protocol HandshakeUpgrade: WebSocketConnection: UpgradeWebSocket-Origin: http://localhostWebSocket-Location: ws://localhost:8080/call
通讯数以”\x00″开头以”\xFF”结尾。具体数据收发过程和一般的通讯过程没什么两样了。

这些标准使得我们在服务端需要去重新做一些工作。已经有很多人实现了这些,并提供出来供大家使用。

为什么要提到node.js呢?node.js是一个服务端javascript解释器,除了语言上简单很容易实现事件事件驱动外,他真实的优势在于很容易去实现异步。他运行在一个V8引擎基础上,理论上这个模型可以用任意语言来实现,并且已经有人在C++和C#上实现了。

下面是一个node.js的helloworld:

var sys = require("sys"),    http = require("http");http.createServer(function(request, response) {    response.sendHeader(200, {"Content-Type": "text/html"});    response.write("Hello World!");    response.close();}).listen(8080);sys.puts("running...");
web的发展形势还是大好的。




	
				
		
原创粉丝点击