• Xufun’s Node.js Primer


        看了我的前研日志,从2012年04月开始接触Node.js,半年快过去了,今天总结一下,把自己的经历汇总,给需要学习的人提供一点参考。

        Node.js是什么?不是Web服务之类,是叫“平台”,官网说明:“Node.js is a platform built on Chrome’s JavaScript runtime for easily building fast, scalable network application. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices. ”

        我在v0.6.15,和v0.8.8上尝试了很多试验,版本升级带来很多不兼容的问题,可见其还在快速发展完善过程中,今天看了网站,已经是v0.8.9了。至于入门教程,之类的网上很多,我是这样学习的,你也可以参考学习。我总结一些自己的所遇,供见者参考,少走弯路。

    http://www.nodebeginner.org/index-zh-cn.html

    http://www.ibm.com/developerworks/cn/opensource/os-nodejs/

        Node.js简单高效,做一个网络服务,我曾经从Socket select、IOCP、gSoap、Apache(PHP)、和IIS(.Net)各级建立一个网络服务,从Sokcet开始实现的难度就不提了,就Apache和IIS的安装配置就需要至少半天吧。Node.js,一个程序搞定!

        Node.js是事件驱动,异步非阻塞方式,适合做快速高效的任务计算。不过异步非阻塞的方式也考验程序流程的设计,感兴趣可以深入尝试一下Node.js的文件读取过程。

        Node.js一个非常值得学习的地方是,学习研究可以仔细了解HTTP的工作过程。如果都是做J2EE和.Net的Web应用,知道Request/Response就可以了,Node.js可以跟踪Request的数据接收过程,了解 on”data”和on”end”这样实际网络数据传输中可能发生的动作,对Socket(select/IOCP)实现都做了封装,但是又可以让使用者看到过程。

        Node.js属于当下热门的平台,多方大牛公司开始提供支持,比如微软。

        Node.js组织和很多机构已经提供了多种应用的支持模块,MongoDB,WebSocket,MySQL等都有,也有了on Rails的Web开发框架。Node.js采用了Common JS定义的模块系统,不同的功能组件被划分成不同的模块,应用程序可以根据自己的需要来选择使用合适的模块。

    MongoDB:

    MongoDB在Node.js的安装:C:\Program Files\nodejs>npm install mongodb-wrapper

    作为对比,MongoDB在PHP的使用:

    $m = new Mongo();
    $db = $m->TestDB;
    $c = $db->TestTB;
    $c->insert(array("key"=>$sn, "val"=>"$sn"."-".rand()."-".rand().";."));
    echo "Now count=".$c->count()."<br>";
    $m->close();

    MongoDB在Node.js使用:

    var http = require("http"),
    mongo = require("mongodb"),
    http.createServer(function(req, res) {
    //创建到TestDB数据库的链接。相当于use TestDB
    db = new mongo.Db("TestDB", new mongo.Server('localhost', 27017, {}), {});
    var listener = function(TestTB) {
    var html = [], len = TestTB.length;
    if(len > 0) {
    for(var i = 0; i < len; i++) {
    html.push('<tr><td>' + TestTB[i].key + '</td><td>' + TestTB[i].val + '</td></tr>');
    }
    }
    }
    db.open(function() {
    // 打开名为TestTB的表
    db.collection("TestTB", function(err, collection) {
    // select * from TestTB 相当于db.TestTB.find()
    collection.find(function(err, cursor) {
    cursor.toArray(function(err, items) {
    products_emitter.emit('TestTB', items);
    });
    });
    });
    });
    }).listen(8000);
    console.log("Started(Modi byXufun20120503)");

    网络访问,IP 0.0.0.0

    默认的例子http.createServer(. . .).listen(8080),只有端口,监听的IP地址是127.0.0.1,即只能本地访问。如果需要网络访问需要http.createServer(. . .).listen(8080,’0.0.0.0’)。

    WebSocket

        关于WebSocket的Node.js实现,网络上例子很多,不过很多都有版本问题。我调试成功的是使用https://github.com/einaros/ws,在Node.js v0.8.8调试通过。

        Node.js不是基于Web网页的,所以其开发不同于PHP的网站实现。因为Web开发的普及,JavaScript几乎没有门槛,但是Node.js的驾驭和大规模使用还需要研究测试再决策使用。特别是用Node.js 代替PHP,更需要慎重考虑。不过作为一项新的技术平台,学习和尝试具有非常的价值,特别是对于Web开发人员来说,通过Node.js学习HTTP的工作过程和浏览器之间的交互步骤,当有人从浏览器登录你的网站时,自动会来请求favicon.ico,原来只是放在根目录就完事了,现在知道了是浏览器发起的第二个动作。

        粗浅尝试,总结一下,供见者参考了。

    本文地址:http://blog.xufun.cn/?p=330

  • 相关阅读:
    sys模块
    os模块
    datetime模块
    time模块

    random模块
    python文件两种用途
    模块的搜索路径
    如何修改cnblogs的文本编辑器
    socket状态
  • 原文地址:https://www.cnblogs.com/xufun/p/2702160.html
Copyright © 2020-2023  润新知