• NodeJS 深入浅出


    环境:Win7,Node.js V0.8.9(http://nodejs.org/)

    打开node.js主页点击安装即可,默认安装在C:\Program Files\nodejs。

    Node 旨在解决什么问题?

    Node 公开宣称的目标是 “旨在提供一种简单的构建可伸缩网络程序的方法”。当前的服务器程序有什么问题?我们来做个数学题。在 Java™ 和 PHP 这类语言中,每个连接都会生成一个新线程,每个新线程可能需要 2 MB 的配套内存。在一个拥有 8 GB RAM 的系统上,理论上最大的并发连接数量是 4,000 个用户。随着您的客户群的增长,如果希望您的 Web 应用程序支持更多用户,那么,您必须添加更多服务器。当然,这会增加服务器成本、流量成本和人工成本等成本。除这些成本上升外,还有一个潜在技术问题,即用户可能针对每个请求使用不同的服务器,因此,任何共享资源都必须在所有服务器之间共享。鉴于上述所有原因,整个 Web 应用程序架构(包括流量、处理器速度和内存速度)中的瓶颈是:服务器能够处理的并发连接的最大数量。

    Node 解决这个问题的方法是:更改连接到服务器的方式。每个连接发射一个在 Node 引擎的进程中运行的事件,而不是为每个连接生成一个新的 OS 线程(并为其分配一些配套内存)。Node 声称它绝不会死锁,因为它根本不允许使用锁,它不会直接阻塞 I/O 调用。Node 还宣称,运行它的服务器能支持数万个并发连接。

    现在您有了一个能处理数万个并发连接的程序,那么您能通过 Node 实际构建什么呢?如果您有一个 Web 应用程序需要处理这么多连接,那将是一件很 “恐怖” 的事!那是一种 “如果您有这个问题,那么它根本不是问题” 的问题。在回答上面的问题之前,我们先看看 Node 的工作原理以及它的设计运行方式。

    // these modules need to be imported in order to use them.
    // Node has several modules.  They are like any #include
    // or import statement in other languages
    var http = require("http");
    var url = require("url");
     
    // The most important line in any Node file.  This function
    // does the actual process of creating the server.  Technically,
    // Node tells the underlying operating system that whenever a
    // connection is made, this particular callback function should be
    // executed.  Since we're creating a web service with REST API,
    // we want an HTTP server, which requires the http variable
    // we created in the lines above.
    // Finally, you can see that the callback method receives a 'request'
    // and 'response' object automatically.  This should be familiar
    // to any PHP or Java programmer.
    http.createServer(function(request, response) {
     
         // The response needs to handle all the headers, and the return codes
         // These types of things are handled automatically in server programs
         // like Apache and Tomcat, but Node requires everything to be done yourself
         response.writeHead(200, {"Content-Type": "text/plain"});
     
         // Here is some unique-looking code.  This is how Node retrives
         // parameters passed in from client requests.  The url module
         // handles all these functions.  The parse function
         // deconstructs the URL, and places the query key-values in the
         // query object.  We can find the value for the "number" key
         // by referencing it directly - the beauty of JavaScript.
         var params = url.parse(request.url, true).query;
         var input = params.number;
     
         // These are the generic JavaScript methods that will create
         // our random number that gets passed back to the caller
         var numInput = new Number(input);
         var numOutput = new Number(Math.random() * numInput).toFixed(0);
          
         // Write the random number to response
         response.write(numOutput);
          
         // Node requires us to explicitly end this connection.  This is because
         // Node allows you to keep a connection open and pass data back and forth,
         // though that advanced topic isn't discussed in this article.
         response.end();
     
       // When we create the server, we have to explicitly connect the HTTP server to
       // a port.  Standard HTTP port is 80, so we'll connect it to that one.
    }).listen(8888);
     
    // Output a String to the console once the server starts up, letting us know everything
    // starts up correctly
    console.log("Random Number Generator Running...");

     保存以上代码到F盘为Random.js,然后打开IE9访问对应的网址,效果图如下:

    改变Number=后面的数字,页面上的文字会随机改变。

     

  • 相关阅读:
    libeXosip2(1-2) -- How-To initiate, modify or terminate calls.
    libeXosip2(1-1) -- How-To initialize libeXosip2.
    libeXosip2(1) -- Modules
    麦田的守望者背景与分析
    statfs函数说明
    c++ 14
    c++ 13
    URAL 2078~2089
    2018 Multi-University Training Contest 1
    Codeforces Round #502
  • 原文地址:https://www.cnblogs.com/haiyabtx/p/2821865.html
Copyright © 2020-2023  润新知