浅谈node.js & websocket

先说node.js,近年来炒得很热,最近项目需要,了解了一下。node.js是一个基于javascript语言的平台,本身并不是语言,底层运行google的v8 javascript引挚,令其执行效率很高,跟其他web开发语言最大的不同就是它的异步执行方式,用过javascript的都应该知道,在javascript代码里一眼望去全是异步回调,这种方式的好处在于使用非阻塞模式可以使javascript只使用一个线程来运行而不会阻碍浏览ui的运行,缺点是……异步看起来比较难理解,特别是回调一多的时候,看起来像在看天书,不过这只是习惯问题,相信深入学习之后会慢慢适应这种编程方式。

在服务器端异步执行其优势很明显,相比传统的cgi进程来说,node.js只运行着一个进程来响应所有请求,因为所有接口都做成异步方式,所以响应速度很快,避免了使用多线程或多进程时的任务切换带来的资源消耗,当然了,如果是做一些计算密集型的请求,如果请求一多,单进程也会显得不够用,不过现在已经有node.js下多进程的方案了,如果是做一些普通web业务,则单进程足够了。

举个例子,一个用户请求一个页面,node.js响应该请求,然后调用mysql读取数据,读的过程是异步的,向mysql发出请求后,node.js继续去做别的事情了,直到系统发出事件,node.js回调相应的事件处理代码,说不定在数据库处理的过程中,node.js已经接待了好多个请求了。

另外一个好处,跟php相比,php依赖于cgi环境运行,即必须有一个服务器环境,进行业务流程处理,处理完后php进程关闭,所以php无法做为常驻进程来做用,比如我的一些应用需要进程一直处于运行状态,php就很难办到了,而node.js可以,它本身就不需要http服务器,自带了http模块,这给我的需求带来了好处。

我的需求是快速地开发一个linux下的守护进程,监听udp端口,并且要能够进行二进制运行,node.js和python都符合这个要求,而且python下的demo也已经开发出来了,但这个进程还需要能够支持websocket协议,这点…node.js可以甩python几条街,因为node.js的异步机制最适合用来做这个协议,而且已经有了开源的方案可选。

接着说下websocket,开发web的都知道,浏览器只认识http协议,而http是无状态半双工协议,即http无法保持对话上下文,一但响应请求将会立即断开连接,服务器无法主动向客户端主动发送消息,这对于一些实时应用来说是个感伤,现在一般做法是做使用客户端定时轮询请求,或者保持长连接,在有消息的时候服务器端才返回响应然后关闭,第一种做法达不到实时性,第二种做法消耗资源,第三种是使用flash做成插件运行。直到websocket的出现,websocket是html5带来的新特性,个人觉得websocket是html5里面最大的亮点,websocket即是在web里面使用的tcp连接,可以让服务器与浏览器保持着一点全双工的连接,双方都可以随时向对方发消息,现在最新的浏览器都支持了这种特性。举个例子,当你在网上使用支付宝付款的时候,跳入支付宝页面的时候会显示一个二唯码,这时你可以打开手机支付宝软件扫一下这个二维码,手机扫描完毕之后浏览器会立即显示二维码已被扫描,当你在手机支付成功的时候,浏览器页面会立即显示你付款成功,这一动作是在极短时间内完成的,说明这个消息是服务器端主动向浏览器端推送的,这里面就使用了websocket协议,瞧,如果你使用传统的方式,能达到这种响应速度吗?

websocket可以做的事情很多,让web开发者们有了更大的想象空间,比如实时web聊天,实时网页游戏等等。

而node.js和websocket结合起来,可以完成服务器的更广领域的扩展,使得服务器可以很方便地开发除了http之外的其他很多协议的需求,当然,这些你都可以c++等语言来开发,但是,开发效率肯定没有天生支持异步的node.js来得快。

未完待续

 

python入门

python的入门很简单,装好合适的py环境之后,打开ide或者使用你自己喜欢的编辑器,创建一个文件,后缀保存为.py,写上一句:

print ‘hello world’
记住,不用;号,然后在命令行,或者在ide上按F5,它就开始运行了,控制台上输出一句“hello world”,就是这么简单
py跟其他语言(基本上跟所有语言对比),语法上最大的不同就是py需要使用缩进来区分语句块,比如下面是一个函数的定义:
def fun():
return 1
pass
在函数里面的执行体需要相对于函数名进行一个TAB缩进,初学起来很不习惯,用久了发现看起来挺好看的,当然了,你的一份文件在不同编辑器之间使用记得要把编辑器的缩进长度设统一,否则看起来很难看。
py的上手不算难,最经典的《python简明教程》就是最好的上手教程。
学了py能做什么?可以在pc上写一些脚本,在控制台里运行,代替人做一些简单的事情,我曾经在嵌入式开发过程中,使用py来自动生成一些代码,减少了我手动输入的劳动; 可以和QT一起配合,用来做PC界面开发;可以用来做WEB应用,这也是现在很热门的应用,因为py的开发效率确实很高(不是运行效率),基于django框架的web应用开发是一种享受!