返回目录html
Node.js是一套用来编写高性能网络服务器的JavaScript工具包,一系列的变化由此开始,在Node中,Http是首要的。Node为建立http服务器做了优化,因此在网上看到的大部分示例和库都是集中在web上(http框架、模板库等)。node
Node 公开宣称的目标是 “旨在提供一种简单的构建可伸缩网络程序的方法”。当前的服务器程序有什么问题?咱们来作个数学题。在 Java™ 和 PHP 这类语言中,每一个链接都会生成一个新线程,每一个新线程可能须要 2 MB 的配套内存。在一个拥有 8 GB RAM 的系统上,理论上最大的并发链接数量是 4,000 个用户。随着您的客户群的增加,若是但愿您的 Web 应用程序支持更多用户,那么,您必须添加更多服务器。固然,这会增长服务器成本、流量成本和人工成本等成本。除这些成本上升外,还有一个潜在技术问题,即 用户可能针对每一个请求使用不一样的服务器,所以,任何共享资源都必须在全部服务器之间共享。鉴于上述全部缘由,整个 Web 应用程序架构(包括流量、处理器速度和内存速度)中的瓶颈是:服务器可以处理的并发链接的最大数量。程序员
Node 解决这个问题的方法是:更改链接到服务器的方式。每一个链接发射一个在 Node 引擎的进程中运行的事件,而不是为每一个链接生成一个新的 OS 线程(并为其分配一些配套内存)。Node 声称它毫不会死锁,由于它根本不容许使用锁,它不会直接阻塞 I/O 调用。Node 还宣称,运行它的服务器能支持数万个并发链接。web
如今您有了一个能处理数万个并发链接的程序,那么您能经过 Node 实际构建什么呢?若是您有一个 Web 应用程序须要处理这么多链接,那将是一件很 “恐怖” 的事!那是一种 “若是您有这个问题,那么它根本不是问题” 的问题。在回答上面的问题以前,咱们先看看 Node 的工做原理以及它的设计运行方式。编程
没错,Node 是一个服务器程序。可是,基础 Node 产品确定不 像 Apache 或 Tomcat。本质上,那些服务器 “安装就绪型” 服 务器产品,支持当即部署应用程序。经过这些产品,您能够在一分钟内启动并运行一个服务器。Node 确定不是这种产品。Apache 能经过添加一个 PHP 模块来容许开发人员建立动态 Web 页,添加一个 SSL 模块来实现安全链接,与此相似,Node 也有模块概念,容许向 Node 内核添加模块。实际上,可供选择的用于 Node 的模块有数百个之多,社区在建立、发布和更新模块方面很是活跃,一天甚至能够处理数十个模块。本文后面将讨论 Node 的整个模块部分。浏览器
Node 自己运行 V8 JavaScript。等等,服务器上的 JavaScript?没错,您没有看错。对于只在客户机上使用 JavaScript 的程序员而言,服务器端 JavaScript 多是一个新概念,但这个概念自己并不是高不可攀,所以为什么不能在服务器上使用客户机上使用的编程语言?缓存
什么是 V8?V8 JavaScript 引擎是 Google 用于其 Chrome 浏览器的底层 JavaScript 引擎。不多有人考虑 JavaScript 在客户机上实际作了些什么?实际上,JavaScript 引擎负责解释并执行代码。Google 使用 V8 建立了一个用 C++ 编写的超快解释器,该解释器拥有另外一个独特特征;您能够下载该引擎并将其嵌入任何 应用程序。V8 JavaScript 引擎并不只限于在一个浏览器中运行。所以,Node 实际上会使用 Google 编写的 V8 JavaScript 引擎,并将其重建为可在服务器上使用。太完美了!既然已经有一个不错的解决方案可用,为什么还要建立一种新语言呢?安全
许多程序员接受的教育使他们认为,面向对象编程是完美的编程设计,这使得他们对其余编程方法不屑一顾。Node 使用了一个所谓的事件驱动编程模型。服务器
// jQuery code on the client-side showing how Event-Driven programming works // When a button is pressed, an Event occurs - deal with it // directly right here in an anonymous function, where all the // necessary variables are present and can be referenced directly $("#myButton").click(function(){ if ($("#myTextField").val() != $(this).val()) alert("Field must match button text"); });
实际上,服务器端和客户端没有任何区别。没错,这没有按钮点击操做,也没有向文本字段键入的操做,但在一个更高的层面上,事件正在 发生。一个链接被创建,这是一个事件!数据经过链接进行接收,这也是一个事件!数据经过链接中止,这仍是一个事件!网络
为 什么这种设置类型对 Node 很理想?JavaScript 是一种很棒的事件驱动编程语言,由于它容许使用匿名函数和闭包,更重要的是,任何写过代码的人都熟悉它的语法。事件发生时调用的回调函数能够在捕获事件处 进行编写。这样可使代码容易编写和维护,没有复杂的面向对象框架,没有接口,没有过分设计的可能性。只需监听事件,编写一个回调函数,其余事情均可以交 给系统处理!
模块中包含了不少功能代码片段,在模块中的代码大部分都是私有的,意思是在模块中定义的函数方法和变量,都只能在同一个模块中被调用。固然,能够将某些方法和变量暴露到模块外,这个时候可使用export对象去实现
首先须要安装nodejs环境,相关文件下载
下载以后,安装以后,在C盘就会出现nodejs的相关目录
OK,咱们来看一下如何实现request.querystring功能的,即get请求的功能,相关代码以下:
var qs = require('querystring'); var http = require('http'); var formidable = require('formidable'); var exec = require('child_process').exec; var fs = require('fs'); var filename = ''; var url = require("url"); function start(response, request) { var getQuery = url.parse(request.url).query; var getData = qs.parse(getQuery); //getData数据 console.log(getData["zzl"]); }
别外一种比较标准的写法重到querystring字符串,写法以下:
var http = require("http"); var url = require("url"); var params = url.parse(request.url, true).query; console.log(params.zzl);
感受第二种写法更清晰
测试:
http://127.0.0.1:8888?zzl=1234
对于nodejs的console控制台的结果就为: